web-dev-qa-db-ja.com

Nohupを使用して1つのコマンドでテールを実行する方法

の代わりに:

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

私はやってみたいです:

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

しかし、Nohupを呼び出した後にReturnキーを押す必要があるため、機能しません。

3
Paul Taylor

bashdashおよび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
3
Kusalananda

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
0
RobotJohnny

問題を再現できません。 「&;」エラーの可能性があります。

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

しかし、尻尾が速すぎて開始できない場合:

Nohup ./script.sh & sleep 1 ; tail -f Nohup.out
0
Vouze