web-dev-qa-db-ja.com

crontabを使用して2つのコマンドを連続して実行します

私の3歳の女の子は SuperTux が大好きです。彼女はマウスを制御できないため、起動時にゲームが自動的に実行されます。ゲーム終了後、コンピューターは自動的にシャットダウンします。

ただし、「crontab -e」に次のコマンドを入力すると:

@reboot env DISPLAY=:0.0 /usr/games/supertux2 && echo "PASSWORD" | Sudo -S shutdown -h now

最初の部分は、ブート時に古いPCでゲームを実行します。私の女の子がゲームを終了したときにコマンドの2番目の部分がコンピューターの電源を切ると思っていましたが、機能していません。

チェーンコマンドA && Bは、Aが終了したときにBを開始するという意味ではありませんか?

ゲームが終了したときにコンピューターの電源を切ることを自動化するにはどうすればよいですか?

4
mini

技術的には、A && BはAが成功した場合にのみBを実行します(ステータスがEXIT_SUCCESS、つまり0で終了します)。同様に、A || Bは、Aが失敗した場合にのみBを実行します。別のオプションはA; Bで、Aの終了ステータスに関係なくBを実行する必要がありますが、Aが完了するまでは実行できません。ゲームが現在どのように終了しているかはわかりませんが、EXIT_SUCCESSステータスで終了していない場合、Bは実行されません。

これをテストするには、次のコマンドを実行して、どのコマンドが文字列を生成するかを確認できます。

Perl -e 'exit 0' && echo "exit was successful"
Perl -e 'exit 0' || echo "exit was successful"
Perl -e 'exit 0'; echo "exit was successful"
Perl -e 'exit 1' && echo "exit was failure"
Perl -e 'exit 1' || echo "exit was failure"
Perl -e 'exit 1'; echo "exit was failure"

最後に、シェルスクリプト/usr/games/supertux2.shを作成できます。

#!/bin/sh
/usr/games/supertux2
echo "PASSWORD" | Sudo -S shutdown -h now

そして、/ usr/games/supertux2ではなく、再起動時にそれを呼び出します

11
Dr.Tower