如何在一个命令中使用 nohup 和 tail it

如何在一个命令中使用 nohup 和 tail it

代替:

  nohup ./script.sh &
  tail -f nohup.out

我想要做:

nohup ./script.sh &; tail -f nohup.out

但它不起作用,因为你必须在调用 nohup 后按回车键。

答案1

bash,dash和 中pdksh&终止命令行,因此后面nohup ./script.sh不能有。;

有了;,你会得到

bash: syntax error near unexpected token `;'

;就像您尝试单独执行命令时会得到的结果一样。

在你的命令ksh93中,zsh它可以正常工作。

对于bash其他 shell,请执行以下操作:

$ nohup ./script.sh & tail -f nohup.out

但请注意,就像运行管道时一样,管道的不同部分(或多或少)同时启动。如果tail碰巧在文件nohup.out存在之前启动,它将失败,并显示类似的内容

tail: nohup.out: No such file or directory 

要解决此问题:

$ nohup ./script.sh & sleep 1 && tail -f nohup.out

或者,如果您不喜欢等待:

$ nohup ./script.sh & while ! test -f nohup.out; do :; done && tail -f nohup.out

或者,正如“VPfB”在下面的评论中指出的那样,

$ nohup ./script.sh >output & tail -f output

答案2

运行 nohup 之前模拟回车键:

echo -e "\n" | nohup ./script.sh & tail -f nohup.out

示例脚本:

[$]› cat tmp1.sh
#!/bin/bash
for i in {1..10}; do echo $i; sleep 1; done

结果:

[$]› echo -e "\n" | nohup ./tmp1.sh & tail -f nohup.out
[3] 25402
nohup: appending output to 'nohup.out'
1
2
3
4
5
6
7
8
9
10

[3]   Done                    echo -e "\n" | nohup ./tmp1.sh

答案3

我无法重现你的问题。 “&;”可能是错误。

nohup ./script.sh & tail -f nohup.out

但如果 tail 太快而无法启动:

nohup ./script.sh & sleep 1 ; tail -f nohup.out

相关内容