変える:
nohup ./script.sh &
tail -f nohup.out
私がしたい:
nohup ./script.sh &; tail -f nohup.out
ただし、nohupを呼び出した後にEnterキーを押す必要があるため、動作しません。
答え1
bash
、 、dash
でコマンドラインを終了するため、pdksh
次は行われません。&
nohup ./script.sh
;
それで;
あなたは得るでしょう
bash: syntax error near unexpected token `;'
;
コマンドを個別に実行しようとすると得られるのと同じです。
あなたのコマンドksh93
によるとzsh
うまく動作します。
他のシェルの場合は、bash
次のようにします。
$ 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を実行する前にEnterキーをシミュレートします。
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