web-dev-qa-db-ja.com

コマンドラインでの</ dev / null&の使用法

Javaプログラムを次のコマンドラインを使用して実行しようとしましたが、末尾の部分がわかりません< /dev/null & のために使用される?

Java   -cp  /home/weka.jar weka.classifiers.trees.J48 –t train_file  >& log < /dev/null &
12
user297850

< /dev/nullは、EOF=を即座にプログラムに送信するために使用され、入力を待機しません(/dev/null(nullデバイス)は、書き込まれたすべてのデータを破棄する特別なファイルですが、書き込み操作が成功したことを報告し、そこから読み取るプロセスにデータを提供しないため、EOFすぐに)。 &は、前のプロセスのバックグラウンドに使用される特殊なタイプのコマンドセパレーターです。

呼び出されるプログラムがわからないので、なぜこのように実行する必要があるのか​​は直接わかりません。

21
Chris Down

</dev/nullは、プログラムの入力を端末から切断します。一部のプログラムは、標準入力が何に接続されているかによって、反応が異なります。リダイレクト</dev/nullを使用すると、プログラムはその入力が端末からのものではないことを通知でき、標準入力から読み取ろうとすると、ファイルの終わりを示す通知をすぐに受け取ります。

最後に&が1つしかないため、プログラムがバックグラウンドで実行されます。つまり、シェルプロンプトがすぐに表示されます。 &がないと、プログラムの実行が終了したときにのみシェルプロンプトが返されます。

スタンドアロン&>&とは無関係であることに注意してください。 >&は、プログラムの標準出力とプログラムの標準エラーの両方を、演算子の後に指定されたファイル名(ここではlog)にリダイレクトするリダイレクト演算子(tcsh、bash、zsh内)です。

つまり、このコマンドラインを確認したときにシェルが行うことは次のとおりです。

  • バックグラウンドでプロセスを開始します。バックグラウンドプロセス:
    • 標準入力を/dev/nullnull device )に接続します。
    • 標準出力と標準エラーの両方をlogというファイルに接続します(ファイルがまだ存在しない場合は作成し、存在する場合は切り捨てます)。
    • $PATHJavaという実行可能ファイルを探します。
    • 5つの引数-cp/home/weka.jarweka.classifiers.trees.J48–t、train_file`を使用してそのファイルを実行します。