Bash
sudo 測試憑據
我有一個可用的 bash 腳本,它可能執行 0 到 8-9 分鐘。它需要
sudo
是否發現問題並需要更改文件的權限/所有權。我不想等待sudo
提示,因為這可能需要幾分鐘才能執行,所以我sudo -v
在腳本的開頭就這樣做了。如果我預計劇本會花很長時間,我經常會走到自助餐廳。所以前段時間我包含了一個陷阱處理程序,它呼叫一個函式
sudo -k
來刪除我的憑據。這樣,當我還沒有回來時,按Ctrl
+C
不會讓某人有權訪問。sudo
我也會在腳本末尾呼叫該函式,以防腳本在我回來之前終止。
sudo
如果我在呼叫腳本之前已經執行了一個命令sudo -v
,它不會詢問我的憑據。那很好。根據我從哪裡開始,我知道腳本不會花很長時間,我等待它完成。如果我在剛剛完成
sudo
命令後啟動它,那麼每次完成後我都沒有sudo
憑據。我確實檢查了
sudo -v
. 在出口 0 上,這並沒有告訴我憑據是否已經存在(從執行腳本之前開始)或者密碼是否在之前正確輸入。這並不能幫助我知道我是否應該sudo -k
在最後跑步。我考慮過製作兩個版本的腳本,一個有 / 一個沒有
sudo -v
/sudo -k
,但我認為這不是一個好的解決方案,而且我有時會選擇錯誤的版本。有沒有更好的方法來解決這個問題?我錯過了什麼嗎?
sudo -nv 2> /dev/null
當憑據存在而不提示輸入密碼時,您可以使用它來獲取退出值 0。
fdisk
如果一開始就沒有憑據,我有類似的東西來執行和刪除憑據。結合 catchCtrl
+C
你會得到類似的東西(我不是一個好的 bash 程序員!):#! /bin/bash # this only removes credentials if logging in at the start was necessary reset_sudo() { if [ $SUDOCREDCACHED != 0 ] ; then # drop credentials if acquired in script sudo -k fi } Ctrl_C() { reset_sudo exit 0 } sudo -nv 2> /dev/null SUDOCREDCACHED=$? if [ $SUDOCREDCACHED != 0 ] ; then # acquire credentials sudo -v if [ $? != 0 ] ; then exit 1 fi fi trap Ctrl_C SIGINT ### your stuff here ### reset_sudo