nohupを使って1つのコマンドでtailする方法

nohupを使って1つのコマンドでtailする方法

変える:

  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

関連情報