2 つのコマンドを連続して実行する必要がありますnohup
。2 番目のコマンドは、最初のコマンドの後に実行する必要があります。コマンドは次のとおりです。
tar -zcf archive.tar.gz.tmp mydir
mv archive.tar.gz.tmp archive.tar.gz
コマンドをバックグラウンドで実行する必要がありますが、当然、両方を同時に実行する必要はありません。2 番目のコマンドは、最初のコマンドが完了した後に実行する必要があります。私はこれを試しました:
nohup tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &
しかし、コマンドはバックグラウンドでは実行されません。bash プロンプトは、2 つのコマンドが完了するまで待機してから、別のプロンプトを表示します。バックグラウンドで実行する必要があります。
私が行った場合:
nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 &
それはバックグラウンドで完璧に実行されます。複数のコマンドを実行しようとしたときのみ発生します。
私も試しました:
nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 & ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &
しかし、それもうまくいきませんでした。無効な構文か何かです。これを行う方法はあると思いますが、構文がよくわかりません。
私が考えられる唯一の代替案は、コマンドをファイルに入れ.sh
てそのファイルを nohup することですが、これを実装する必要がある Linux システムでは必ずしもそれができるわけではありません (権限の制限など)。
答え1
最も簡単な解決策: シェルスクリプトを作成して
#/bin/sh
tar -zcf archive.tar.gz.tmp mydir
mv archive.tar.gz.tmp archive.tar.gz
そして を使用しますnohup myscript
。スクリプト内に追加のドキュメントがいくつかある可能性があります。
(はい、私はドキュメント作成が大好きです。特に、複数の人と仕事をしているときや、いつか仕事を辞める可能性があり、後任者がその理由を解明する必要がある場合などです。)
代替案としては、サブタスク用に新しいシェルを起動する方法があります(この場合はtarとmove)
nohup `$(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz)
代替案2:
nohup ```tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz```。
しかし、私はスクリプトの方が本当に好きです。スクリプト内のコメントは、あなたや他の誰かが数年後にスクリプトを見て、なぜこのようにしたのか疑問に思ったときに非常に役立つかもしれません。
関係のない話ですが、バックティックを含む回答を投稿するにはどうすればいいのでしょうか? (シェルのコマンドで「このコマンドを使用し、その出力を別のコマンドの入力として渡す」)。
答え2
括弧が必要だと思います。
nohup $(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz) >/dev/null 2>&1 &
答え3
バッシュラップかな?
nohup bash -c 'tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1' &
答え4
screen
コマンドを実行して screen セッションから切断するには、次のようにします。
screen
tar -zcf archive.tar.gz.tmp mydir && mv archive.tar.gz.tmp archive.tar.gz
ctrl-a d to detach
コマンドは nohup の場合と同じように実行されます。