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


12

我尝试使用以下命令行运行示例Java程序。但是,我不知道尾随< /dev/null &用途是什么?

java   -cp  /home/weka.jar weka.classifiers.trees.J48 t train_file  >& log < /dev/null &

Answers:


21

< /dev/null用于立即将EOF发送到程序,以便它不等待输入(/dev/null,空设备,是一个特殊文件,该文件会丢弃所有写入其中的数据,但会报告写操作成功,并且不提供任何数据给从中读取的任何进程,立即产生EOF)。&是一种特殊类型的命令分隔符,用于后台执行前面的进程。

在不知道程序被调用的情况下,我不直接知道为什么需要以这种方式运行它。


6

</dev/null从终端断开程序的输入。某些程序根据其标准输入所连接的内容而做出不同的反应。通过重定向</dev/null,该程序可以判断其输入不是来自终端,并且如果它试图从其标准输入中读取,它将立即收到文件结束指示。

最后的孤行使&程序在后台执行。这意味着您会立即返回一个shell提示。如果没有使用&,则仅当程序完成执行时,您才会得到外壳提示。

请注意,独立版本&与无关>&>&是重定向操作符(在tcsh,bash和zsh中),它将程序的标准输出和程序的标准错误都重定向到该操作符后面指定的文件名(此处log)。

换句话说,shell在看到此命令行时会执行以下操作:

  • 在后台启动一个进程。在后台过程中:
    • 将标准输入连接到/dev/null空设备)。
    • 将标准输出和标准错误都连接到名为的文件log(如果尚不存在则创建文件,如果存在则将其截断)。
    • 寻找所谓的可执行文件java$PATH
    • 执行该文件与5个参数-cp/home/weka.jarweka.classifiers.trees.J48–t,train_file`。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.