啟用 Bash-Completion 以將超級使用者執行檔擴展到完整路徑
我正在執行 OpenSUSE 12.3(並且已經看到了自 11 以來的行為),並且發現我無法在不使用完整路徑的情況下呼叫超級使用者程序(例如關機、重啟)。對我來說,這些執行檔中有很多都存在於 中
/sbin
,因此sudo reboot
我必須呼叫sudo /sbin/reboot
. 值得慶幸的是,當使用sudo OpenSUSE 的 shell ( bash ) 時,當我按下鍵時會擴展這些路徑Tab
,因此sudo rebo[Tab]
會導致sudo /sbin/reboot
.OpenSUSE 提供了一個名為bash-completion的包,它擴展了****bash的自動完成功能以包含各種其他上下文(例如gsettings)。不幸的是,預設情況下,此包不會將超級使用者執行檔擴展為其完整路徑,而只是擴展執行檔名稱,因此
sudo rebo[Tab]
會導致sudo reboot
,這將導致sudo: reboot: command not found
錯誤。如何安裝/執行bash-completion 並確保超級使用者執行檔的自動完成功能擴展到完整路徑?
將@Gilles的評論擴展到答案:
這個問題詢問了bash-completion將執行檔擴展
/sbin
到它們在 Tab 上的完整路徑,但我通過將超級使用者目錄(例如,等)添加到 sudo 搜尋路徑來滿足/sbin
我/usr/sbin
的要求。為此,我必須將
secure_path
變數添加到 Sudoers 文件(使用 編輯visudo
),類似於以下行:Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
如果有人提供了一個解決方案來實際擴展這些執行檔的路徑,我會認為這是問題的真正答案,但同樣,這個解決方案滿足我的要求。
為什麼不直接將 /sbin 添加到 PATH var 中?:
export PATH=$PATH:/sbin