次のbashスクリプトがあるとしましょう。
#!/bin/bash
sudo command1
command2
sudo command3
command2
私はrootとして実行したくないのでsudo
。sudo command1
残念ながら、command2
完了するのに約2時間かかります。したがって、sudo資格情報のタイムスタンプがタイムアウトしてスクリプトが到着すると、sudo command3
パスワードを再入力するように求められます。
で説明されているように、sudo資格情報のタイムスタンプタイムアウトを完全に無効にしたくありません。https://superuser.com/a/149740例えば。タイムアウトを一時的に無効にして、このbashセッションが終了するまでそのセッションの資格情報を効果的に維持したいと思います。
ベストアンサー1
sudo
最善の選択肢は、sudoタイムスタンプを更新し、権限が不要になったときに終了する(バックグラウンド)忙しい待機ループだと思います。以下は、sleep 6
two hourの代わりに実行され、代わりに表示されるコマンドをcommand2
実行するサンプルスクリプトです。/bin/echo
command1
command2
#!/bin/sh
sudo /bin/echo command 1
while :; do sudo -v; sleep 1; done &
infiloop=$!
sleep 6
sudo /bin/echo command 3
kill "$infiloop"
実際のスクリプトでは、より快適なループを使用することをお勧めします。
#!/bin/sh
sudo command1
while :; do sudo -v; sleep 59; done &
infiloop=$!
command2
sudo command3
kill "$infiloop"
sleep 59
sudoersの既存の設定に基づいてフレーバーを調整しますtimestamp_timeout
。タイムスタンプのタイムアウトが60秒の場合、選択できる方法を示すために59を選択しました。