の代わりに:
Nohup ./script.sh &
tail -f Nohup.out
私はやってみたいです:
Nohup ./script.sh &; tail -f Nohup.out
しかし、Nohupを呼び出した後にReturnキーを押す必要があるため、機能しません。
bash
、dash
およびpdksh
では、&
はコマンドラインNohup ./script.sh
を終了するため、後に;
を付けることはできませんそれ。
;
を使用すると、
bash: syntax error near unexpected token `;'
コマンド;
を単独で実行しようとした場合と同じように。
ksh93
およびzsh
では、コマンドはそのまま正常に動作します。
bash
およびその他のシェルの場合は、代わりに次のようにします。
$ Nohup ./script.sh & tail -f Nohup.out
ただし、パイプラインを実行する場合と同様に、パイプラインのさまざまな部分が(多かれ少なかれ)同時に開始されることに注意してください。ファイルNohup.out
が存在する前にtail
が起動すると、次のようなエラーが発生します。
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
Nohupを実行する前にReturnキーをシミュレートします。
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
問題を再現できません。 「&;」エラーの可能性があります。
Nohup ./script.sh & tail -f Nohup.out
しかし、尻尾が速すぎて開始できない場合:
Nohup ./script.sh & sleep 1 ; tail -f Nohup.out