use*_*850 14 linux command-line shell tcsh io-redirection
我尝试使用以下命令行运行示例 java 程序。但是,我不知道尾随部分是做什么< /dev/null &用的?
java -cp /home/weka.jar weka.classifiers.trees.J48 –t train_file >& log < /dev/null &
Run Code Online (Sandbox Code Playgroud)
Chr*_*own 22
< /dev/null用于立即向程序发送EOF,使其不等待输入( /dev/null,空设备,是一个特殊的文件,丢弃所有写入它的数据,但报告写操作成功,并且不提供任何数据给任何读取它的进程,立即产生 EOF)。&是一种特殊类型的命令分隔符,用于使前面的进程后台运行。
在不知道被调用的程序的情况下,我不直接知道为什么需要以这种方式运行它。
</dev/null从终端断开程序的输入。一些程序的反应取决于它们的标准输入所连接的内容。通过重定向</dev/null,程序可以判断其输入不是来自终端,并且如果它试图从其标准输入中读取,将立即收到文件结束指示。
最后的孤独&导致程序在后台执行。这意味着您会立即返回一个 shell 提示。如果没有&,您只会在程序完成执行时返回一个 shell 提示。
请注意,独立&与>&. >&是一个重定向操作符(在 tcsh、bash 和 zsh 中),它将程序的标准输出和程序的标准错误重定向到操作符后面指定的文件名(此处log)。
换句话说,shell 看到这个命令行时会做的事情是:
/dev/null(空设备)。log(如果文件不存在则创建文件,如果存在则截断它)。java中$PATH。-cp, /home/weka.jar, weka.classifiers.trees.J48, –t, train_file`执行该文件。