Environment-Variables
什麼是 $PWD?(與目前工作目錄相比)
所以維基百科(連結)告訴我該命令
pwd
是“列印工作目錄”的縮寫,這是有道理的。但是對於環境變數,“P”必須是 print 以外的首字母縮寫詞。
我聽到人們在談論“目前工作目錄”,這聽起來更好,更直覺,但似乎仍然呼叫了環境變數 $ PWD, and not $ 順時針。沒有人說過“你檢查了列印工作目錄變數嗎?”。
我目前正在使用 Web 應用程序伺服器 uWSGI,執行時它告訴我(在 uWSGI 統計頁面上):
"cwd":"/home/velle/greendrinks",
所以他們顯然喜歡(更直覺的首字母縮寫詞)
cwd
overpwd
。我想我想弄清楚我是否誤解了某些東西,或者只是給環境變數一個不直覺的名稱?
這取決於你在做什麼。首先,
$PWD
它是一個環境變數,pwd
是一個內置的 shell 或一個實際的二進製文件:$ type -a pwd pwd is a shell builtin pwd is /bin/pwd
$PWD
現在,除非您使用該-P
標誌,否則內置的 bash 將簡單地列印目前值。如中所述help pwd
:
pwd: pwd [-LP]
列印目前工作目錄的名稱。
選項:
-L``$PWD
如果它命名目前工作目錄,則列印它的值-P
列印物理目錄,沒有任何符號連結 預設情況下,“pwd”的行為就像指定了“-L”一樣。
pwd
另一方面,二進製文件通過系統呼叫獲取目前目錄,該系統getcwd(3)
呼叫返回與readlink -f /proc/self/cwd
. 為了說明,嘗試進入一個連結到另一個目錄的目錄:$ ls -l total 4 drwxr-xr-x 2 terdon terdon 4096 Jun 4 11:22 foo lrwxrwxrwx 1 terdon terdon 4 Jun 4 11:22 linktofoo -> foo/ $ cd linktofoo $ echo $PWD /home/terdon/foo/linktofoo $ pwd /home/terdon/foo/linktofoo $ /bin/pwd /home/terdon/foo/foo
因此,總而言之,在 GNU 系統(例如 Ubuntu)上,
pwd
除非echo $PWD
您使用該-P
選項,否則它們是等價的,但/bin/pwd
不同且行為類似於pwd -P
.