Bash
符號連結和 sudo
我創建了一個符號連結:
ln -s /tmp/folder1 /tmp/folder2
然後我去 /tmp/folder2 並執行
pwd
:$ cd /tmp/folder2/ $ pwd /tmp/folder2 $ sudo pwd /tmp/folder1 # <-- This is the odd part
**為什麼
pwd
withsudo
給出原始目錄?**我正在編寫一個 bash 腳本,需要目前目錄的絕對路徑。使用 sudo 我似乎無法獲取原始目錄。
pwd命令既是 shell 內置命令,又是 /bin/pwd 。在正常情況下,內置將優先於 /bin/pwd 執行。pwd 命令可以被稱為
pwd -L
或pwd -P
內置和 /bin/pwd 預設pwd -L
來自手冊頁-L, –logical 使用環境中的 PWD,即使它包含符號連結
因此,當您執行 pwd 時,您實際上執行的是 pwd -L ,它實際上會列印 $PWD (如果存在)。執行時
sudo pwd
, sudo 僅提供已被告知通過env_keep
指令傳遞的環境變數。PWD 通常不在此列表中,因此 sudo pwd 必須確定它的位置,並且實際上執行為pwd -P
-P, –physical 避免所有符號連結
解決問題的方法是,
pwd -P
如果您始終想要物理目錄路徑,或者(如@Felix 所說)將 PWD 添加到環境變數列表中以通過 sudoers 中的 env_keep 指令保留env_keep += "PWD"