次のコマンドラインを使用してサンプルJavaプログラムを実行してみます。しかし、尾が何であるかわかりませんか< /dev/null &
?
java -cp /home/weka.jar weka.classifiers.trees.J48 –t train_file >& log < /dev/null &
答え1
< /dev/null
入力を待たないように、プログラムに EOF をすぐに送信するために使用されます。/dev/null
空のデバイスは、書き込まれたすべてのデータを削除しますが、書き込み操作が成功したと報告し、読み取るデータを提供しない特別なファイルです。すぐにEOFプロセスを作成します)。&
以前のプロセスの背景を提供するために使用される特殊なタイプのコマンド区切り文字。
プログラムが呼び出されるのがわからない場合は、なぜこのように実行するのかを直接知ることはできません。
答え2
</dev/null
端末からプログラム入力を外します。いくつかのプログラムは、標準入力が何に接続されているかに応じて異なる反応をします。リダイレクトを使用すると、</dev/null
プログラムは入力が端末から来ていないことを知ることができ、標準入力から読み取ろうとするとすぐにファイルの終わりを表示します。
最後に lone がある場合、&
プログラムはバックグラウンドで実行されます。これは、シェルプロンプトがすぐに受信されることを意味します。それ以外の場合は、&
プログラムの実行が完了した場合にのみシェルプロンプトが表示されます。
&
独立とは関係がないことに注意してください>&
。>&
プログラムの標準出力とプログラムの標準エラーを演算子の後に指定されたファイル名(ここでlog
)にリダイレクトするリダイレクト演算子(tcsh、bash、zsh)。
つまり、シェルがこのコマンドラインを表示するときは、次のことを行います。
- バックグラウンドでプロセスを開始します。バックグラウンドプロセスでは:
- 標準入力を
/dev/null
(空のデバイス)。 - 標準出力と標準エラーを呼び出されたファイルにリンクします
log
(ファイルがまだ存在しない場合は作成し、それを切り取ります)。 java
で検索してください$PATH
。-cp
、、、/home/weka.jar
およびweka.classifiers.trees.J48
5つのパラメータを使用–t
してこのファイルを実行しますtrain_file
。
- 標準入力を