Bash

啟用 Bash-Completion 以將超級使用者執行檔擴展到完整路徑

  • September 8, 2014

我正在執行 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

引用自:https://unix.stackexchange.com/questions/88468