bashで現在実行中のコマンドの後にコマンドを実行する方法は?


18

wgetでファイルをダウンロードしていて、ダウンロードが終了したらコンピューターの電源をオフにしたいのですが、どこかに行く必要があります:)プロセスが終了したときにbashでコマンドを正確に実行することは可能ですか?

私はこれが機能することを知っています:

wget http://example.com/file.rar; 今すぐシャットダウン

しかし、私だけを入力した場合:

wget http://example.com/file.rar

2
&&および||の使用を検討してください の代わりに ;。&&および|| 次のコマンドを実行する前に前のコマンドの戻り値を確認してください... wgetが失敗した場合に備えて、シャットダウンしたくない場合があります。
KFro

回答:


31

次のようなことができます:

  1. ctrl-zでwgetの実行を停止します(停止されず、中断されます)。
  2. バックグラウンドに入れる(bg)
  3. 実行:待機; シャットダウン-h now

waitは、現在のシェル(つまり、このwget)からバックグラウンドで実行されるすべてのプログラムを待機します。

待機が終了すると、シャットダウンが続行されます。


完了したら、wgetインスタンスをフォアグラウンド(fg)することを忘れないでください。wgetがすでに実行されている場合は、^ z(control-z)を使用してフォアグラウンドに配置できます。
アンドリュースカネリ

4
進行状況バーを本当に見たい場合を除き、必要ありません。
dmckee

彼はマシンをそのままにしてシャットダウンするので、必要はありません。
ウルフ

11

別のシェルでは、使用します

ps -u <your username> | grep wget

待機するコマンドのPIDを見つけるには、

wait <PID>; shutdown -h now

そのため、プロセスが終了するまでシャットダウンは実行されません。depesz's answerも参照してください。


+1、注意:wait同じシェルから開始されたコマンドに対してのみ機能します
-Chriki

4

私の解決策は次のとおりです。Control+ Zを使用して実行時間の長いタスクを中断し、次のように入力します。

fg; echo "Done!"

コマンドの成功または失敗に基づいて異なる反応を実行する場合は、&&および||を使用します 短絡演算子として。

fg && echo "Success!" || echo "Failure!"

編集:これはsudoでは機能しません。パスワードを要求するためです。したがって、sudoを使用して例を削除しました。2番目のタスクにsudoが必要な場合は、ここに掲載されている別の方法を使用してください。

一方、GNOMEとKDEの両方が、適切なD-Bus信号などを送信することにより、sudoを使用せずにシャットダウン/リブートをトリガーする方法を提供すると考えています。


+1のためのfg...、しかしsudo、それはパスワードの入力を求められた場合問題になる可能性
mark4o

うーん。はい、何かが終わったときに物事をsudoするためにこのトリックを使ったことはありません。sudoの場合、別のトリックが必要です。それに応じて投稿を編集します。
ライアンC.トンプソン

それは自動的にフォアグラウンドへのプロセスを置くとして、私の目的のために、この答えは優れている
クッキー

また、sudoのパスワードは(ユーザーごとおよびコマンドごとに)無効にすることができます-ユーザーが一度sudoを介してシャットダウンできる場合、ユーザーは常にそうすることが許可される場合があります。敵対的なシャットダウンは、場合によってはそれほど危険ではないかもしれません-実行中のマシンでのゲストアクセスの侵害ほど危険ではありません。
クッキー

1

はい、2番目のコマンドを入力してEnterキーを押します。現在のプログラムがテキストをスクロールしている場合、あなたが正しく入力しているものを見ることができないので、あなたが正しくそれをするようにキーを見てください。

よりスマートな方法は、別のTTY(CTRL + ALT + F1からF6)に切り替えてコマンドを同時に実行することです。または、画面のようなコマンドラインプログラムを使用している場合は、新しいウィンドウを作成できます。


最初のオプションの場合は+1。私は、2番目のオプションがどのように機能するかを理解していないのではないかと心配しています。
innaM

たとえば、Ctrl + Alt + F2を押すと、ログインしてコマンドを入力できる新しい2番目のコンソールに切り替わり、この方法で2番目のコマンドを実行できます。2番目に、画面(よりおしゃれな方法でコンソールを使用するプログラム)をダウンロードすると、2番目のタブ/ウィンドウを開くことができ、そこで再度ログインせずにコマンドを再度入力できます。ただし、同時に必要な場合は、オプション1を使用できます。同じ効果を達成する別の方法はないと思います。プロセスがまだ実行されているかどうかを別のTTY /ウィンドウを使用してスクリプトを確認する場合を除きます。:-P
タマラWijsman

dmckeeの答えから待機PIDを使用してください
クッキー

1

あなたが空想を得たいなら、wgetのリターンステータスをチェックし、それが成功した場合のみシャットダウンします。

% wget http://example.com/file.rar
% if [ $? -eq 0 ]
> then
> shutdown now
> fi

2
これはスクリプトを作成する場合の優れたアプローチwgetですが、実行中にテストをビルドするためのプロンプトが表示されません。
dmckee

これをControl-Zおよびfgトリックと組み合わせて回避することができます。
ライアンC.トンプソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.