代替:
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