為什麼“sudo pwd”有效但“sudo cd”無效?

為什麼“sudo pwd”有效但“sudo cd”無效?

許多 StackOverflow 答案表明這是因為cd是內建函數,但是type cdtype pwd都返回“shell 內建函數”並且只sudo cd返回“未找到命令”。

那麼,與「僅適用於程序」cd的許多答案相反,是否將其作為特殊情況處理?sudo

答案1

pwd既作為 shell 內建函數存在(這就是為什麼type pwd返回它是 shell 內建函數)又單獨作為GNU 核心實用程式。您的系統正在使用的版本pwdGNU 核心實用程式版本。它是一個可執行文件,因此可以使用 sudo 來運行它;與它不同的cd是 shell 內建指令。

您可以親自驗證這一點。

自己輸入這兩個命令並觀察結果。 (如果您的系統中有同一命令的多個版本,該which命令將在您輸入時告訴您正在調用哪一個)

which pwd

which cd

當您執行命令時,shell 內建命令不會返回可執行檔案的資料夾路徑which。以下是我的系統上這兩個命令的輸出範例:

nate@linux:~> which pwd  
/usr/bin/pwd


nate@linux:~> which cd
which: no cd in (/home/nate/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/lib/mit/bin:/usr/lib/mit/sbin:/home/nate/Scripts:/home/nate/Scripts)

答案2

pwd某處有一個可執行檔(嘗試whereis pwd)並sudo使用它。

相關內容