Linux

< /dev/null & 在命令行中的用法

  • February 16, 2020

我嘗試使用以下命令行執行範例 java 程序。但是,我不知道尾隨部分是做什麼&lt; /dev/null &用的?

java   -cp  /home/weka.jar weka.classifiers.trees.J48 –t train_file  &gt;& log &lt; /dev/null &

&lt; /dev/null用於立即向程序發送EOF,這樣它就不會等待輸入( /dev/null,空設備,是一個特殊的文件,它會丟棄所有寫入它的數據,但報告寫操作成功,並且不提供數據給任何從中讀取的程序,立即產生 EOF)。&是一種特殊類型的命令分隔符,用於後台處理前面的程序。

在不知道被呼叫的程序的情況下,我不直接知道為什麼需要以這種方式執行它。

&lt;/dev/null斷開程序的輸入與終端的連接。有些程序的反應不同,取決於它們的標準輸入連接到什麼。通過重定向&lt;/dev/null,程序可以判斷它的輸入不是來自終端,並且如果它嘗試從其標準輸入讀取,將立即收到文件結束指示。

&末尾的孤獨導致程序在後台執行。這意味著您會立即得到一個 shell 提示。如果沒有&,您將僅在程序完成執行時返回 shell 提示符。

請注意,standalone&&gt;&. &gt;&是一個重定向運算符(在 tcsh、bash 和 zsh 中),它將程序的標準輸出和程序的標準錯誤都重定向到運算符後面指定的文件名(此處log)。

換句話說,當 shell 看到這個命令行時,它會做什麼:

  • 在後台啟動一個程序。在後台程序中:

    • 將標準輸入連接到/dev/null空設備)。
    • 將標準輸出和標準錯誤都連接到呼叫log的文件(如果文件尚不存在則創建文件,如果存在則截斷它)。
    • 查找java$PATH.
    • -cp使用 5 個參數, /home/weka.jar, weka.classifiers.trees.J48, –t, train_file`執行該文件。

引用自:https://unix.stackexchange.com/questions/27955