下面的代碼檢查,如果你有root權限,然後再次運行該腳本:路徑重新運行作爲須藤時
CMDLN_ARGS="[email protected]" # Command line arguments for this script (if any)
export CMDLN_ARGS
func_check_for_sudo() {
if [ ! $(id -u) -eq 0 ]; then
echo "You may be asked for your login password for [`whoami`]." ;sleep 1
LAUNCH="`dirname \"${0}\"`"
exec sudo -S su -c ${LAUNCH}/$(basename ${0}) ${CMDLN_ARGS}
exit ${?}
fi
}
如果事情會錯的是,當我把這個腳本放在「$ HOME/bin」文件夾中,所以我可以在沒有路徑的情況下啓動它。它給了我錯誤「沒有這樣的文件或目錄」。我需要腳本來獲取這些信息並正確傳遞給exec。
我的問題是這樣的:如何在不使用路徑的情況下調用正確的腳本時從腳本中正確獲取/ path/to/script_name?回顧一下,我打電話給MY_SCRIPT insead/path/to/MY_SCRIPT,這會打破我的腳本,因爲它必須檢查root權限,如果沒有,請再次運行。
基本上有問題的代碼行是這樣的,其中$ {0}是腳本的名稱(含路徑,如果你有一個叫吧):
exec sudo -S su -c ${0} ${CMDLN_ARGS}
爲什麼使用'sudo'獲得root權限,然後運行'su'獲得第二次root權限?爲什麼你根本不用運行'exec sudo -S「$ 0」「$ @」'來完全分離'$ LAUNCH'(用一個極其扭曲的代碼行)?如果來自PATH的相關目錄不在root的PATH上,但是無論如何將發生這種情況(如果$ LAUNCH設置爲'。',因爲$ 0不包含路徑組件),這可能會失敗。 –
是的,我只是用啓動來測試的東西,但sudo的原因是,用戶不會知道根本身..謝謝你的意見。不勝感激! :-) –