すべてのコンピュータで使用されますmolly-guard
が、時にはコンピュータにSSHを介して接続し、最後の手順でコンピュータを再起動するスクリプトを実行したいが、問題が発生してmolly-guard
ホスト名を入力するように求められます。
フラグのようなものを探していますが、--molly-guard-do-nothing
何もしない代わりに呼び出しだけをし--molly-guard-do-not-ask
て確認を要求しません。
マニュアルページにはこれに関する情報がないので、回避策があるかどうか疑問に思います。
SSH経由でマシンに接続した後にのみ使用できます。つまり、cronjobなどのコンテキストでは絶対に必要ではありませんが、うまく機能すると大丈夫です。
具体的には、問題のスクリプトは次のとおりです。
sudo apt-get update && apt list --upgradable
echo ""
echo "---- ok. what next? ----"
echo ""
read -n 1 -p "exit or upgrade? (E/u) " ans;
case $ans in
u|U) printf "\n\nok, invoking 'sudo apt-get upgrade'\n\n"; sudo apt-get upgrade;;
*) printf "\nok, exited\n\n"; exit;;
esac
echo ""
echo "---- ok. what next? ----"
echo ""
read -n 1 -p "exit, autoremove or reboot? (E/a/r) " ans;
case $ans in
a|A) printf "\n\nok, invoking 'sudo apt-get autoremove'\n\n"; sudo apt-get autoremove;;
r|R) printf "\n\nok, invoking 'sudo reboot'\n\n"; sudo reboot;;
*) printf "\nok, exited\n\n"; exit;;
esac
echo ""
echo "---- ok. what next? ----"
echo ""
read -n 1 -p "exit or reboot? (E/r) " ans;
case $ans in
r|R) printf "\n\nok, invoking 'sudo reboot'\n\n"; sudo reboot;;
*) printf "\nok, exited\n\n"; exit;;
esac
答え1
デフォルトでは、対話型molly-guard
SSHログインにあると判断された場合にのみホスト名の入力を求められます。標準入力ストリームが端末として機能するデバイスに接続されていることを確認して、「会話型」状態を決定します。 (特に、対応する添え30-query-hostname
字は、test -t 0 || exit 0
プロンプトを発行するコードに到達する前に実行されます。)
スクリプトを実行してビターミナルから標準入力をリダイレクトすることで、このテストを強制的に失敗させることができます。 /dev/null
次の伝統的なオプションになります。
$ my_script_that_will_trigger_a_reboot </dev/null
スクリプトを再起動する前に端末から入力を受け取り、標準入力がリダイレクトされた状態でスクリプトを実行できない場合は、コマンドに対してのみ標準入力をリダイレクトするようにスクリプトを変更できますreboot
。おそらく、スクリプトにリダイレクトするかどうかを知らせるオプションを提供して、デフォルトでreboot
まだ介入できるようにすることもできますmolly-guard
。