对于以下命令:
ssh -t esolve@hostname 'sudo nohup bash -c "ls > log 2>&1 &"'
我总是收到错误信息:
nohup: ignoring input and appending output to `nohup.out'
为什么会发生这种情况以及如何避免此错误信息?
此外,在下面(我用它来启用输出到屏幕和文件),
stdbuf -o 0 command|& tee logfile
&
它的用途是什么?
答案1
碰巧您正在运行的命令nohup
永远不会写入 stdout 或 stderr,并且您没有向其发送任何输入。但nohup
无法知道这一点,因此它告诉您任何输入都将被丢弃,任何输出都将写入nohup.out
.
为了避免这种情况,请将nohup
的 stdin、stdout 和 stderr 重定向到/dev/null
.
ssh -t esolve@hostname 'sudo nohup bash -c "ls > log 2>&1 &" </dev/null >/dev/null 2>/dev/null'
至于|&
,从bash手册:
管道的格式是
[time [-p]] [!] command1 [ [| or |&] command2 …]
管道中每个命令的输出通过管道连接到下一个命令的输入。也就是说,每个命令都会读取前一个命令的输出。此连接在命令指定的任何重定向之前执行。
如果
|&
使用 ,则 的标准错误通过管道command1
连接到的标准输入;command2
它是 的简写2>&1 |
。
这是一个 bash 扩展,也存在于 zsh 中。