Linux
在安裝腳本期間臨時增加 sudo 的超時時間
我正在嘗試編寫一個腳本來安裝一堆軟體,我不想執行所有的東西
root
,所以我希望能夠提示輸入密碼,然後繼續安裝,使用sudo
或su
在我需要的時候獲得特權。我
sudo -v
在腳本開始時提示輸入密碼,然後稍後正常使用 sudo。這很好用,直到我進行一個接管超時的安裝。我寧願不必永久增加超時。有沒有辦法只增加目前會話的 sudo 超時時間?
您可以設置一個在後台執行的循環以定期執行“sudo -v”,訣竅當然是讓循環在腳本終止時干淨地終止。所以兩個程序之間必須有某種類型的通信;tmp 文件對此很好,並且它們也可以在腳本執行後輕鬆清理。(無論如何,安裝腳本通常會這樣做。)
例如(刪除 ’echo’ 語句以使用它;這些只是顯示它“工作”):
#!/bin/bash log=running_setup.txt sudo_stat=sudo_status.txt echo "========= running script $$ ========" echo $$ >> $sudo_stat trap 'rm -f $sudo_stat >/dev/null 2>&1' 0 trap "exit 2" 1 2 3 15 sudo_me() { while [ -f $sudo_stat ]; do echo "checking $$ ...$(date)" sudo -v sleep 5 done & } echo "=setting up sudo heartbeat=" sudo -v sudo_me echo "=running setup=" | tee $log while [ -f $log ] do echo "running setup $$ ...$(date) ===" | tee -a $log sleep 2 done # finish sudo loop rm $sudo_stat
然後你會看到……(注意:pid 被放入 tmp 文件中,這樣你就可以輕鬆地殺死它。不過,這不是必需的):
$ ./do_it.sh ========= running script 6776 ======== =setting up sudo heartbeat= [sudo] password for user: =running setup= checking 6776 ...Wed May 4 16:31:47 PDT 2011 running setup 6776 ...Wed May 4 16:31:48 PDT 2011 === running setup 6776 ...Wed May 4 16:31:50 PDT 2011 === running setup 6776 ...Wed May 4 16:31:52 PDT 2011 === checking 6776 ...Wed May 4 16:31:53 PDT 2011 running setup 6776 ...Wed May 4 16:31:54 PDT 2011 === <ctrl-c> (cleans up files, then exits)