考虑以下场景:
尾部文件:
#!/bin/bash
tail -f test.txt
调用.sh:
#!/bin/bash
nohup ./tail.sh &
invoke_explicitredirect.sh:
#!/bin/bash
nohup ./tail.sh > out.log &
在终端中运行两者具有相同的效果:
- 运行后我重新获得了终端的控制权
./tail.sh
tail
终端上没有出现任何输出
ssh
但是,当使用(例如)运行它时ssh <user>@<hostname> "<script>"
:
invoke_explicitredirect.sh
将控制权返回给ssh
(并终止)invoke.sh
挂起,直到我发送SIGINT
man nohup
如果可能的话,会nohup
自动将输出重定向到“nohup.out”:
If standard output is a terminal, append output to 'nohup.out' if possible, '$HOME/nohup.out' otherwise.
nohup
让附加到输出nohup.out
和显式重定向输出之间有什么区别?
答案1
当您通过 ssh 远程启动命令时,标准输出不是终端。使用-t
选项 withssh
可以使两个命令获得相同的行为。
有关 ssh 和 nohup 的更多详细信息:http://snailbook.com/faq/background-jobs.auto.html(摘自维基页面:https://en.wikipedia.org/wiki/Nohup)