目前工作目錄(current working directory)
想像你站在一棟巨大建築裡的某一個房間。當你說「廚房」時,你指的是相對於你現在所在位置的廚房,而不是某個絕對的地圖座標。目前工作目錄正是你在目錄樹裡的「我站在哪裡」。它是一個行程目前所在的資料夾,也是所有相對路徑被詮釋的起點。
每個執行中的行程都把自己的目前工作目錄當成它狀態的一部分帶著走——作業系統替你記住它。當你輸入或呼叫一條相對路徑(像 data/report.txt)時,系統會默默把你的目前工作目錄黏到它前面以得到完整路徑,再從那裡走過樹。一個切換目錄的操作,藉由更新這個存下的值把你移到不同的資料夾;從此以後,同樣的相對名稱會指向新的地方。因為 cwd 屬於一個行程,所以在某個程式(比方說一個 shell)裡切換目錄並不會移動任何其他程式,而子行程通常在被建立的那一刻繼承父行程的 cwd。
為什麼重要:工作目錄使簡短、方便的相對路徑成為可能——你不必每次都從根打出完整的路線。但這份方便也是陷阱:相對路徑的意義默默地取決於這塊隱藏的行程狀態。一個假設自己位於某特定資料夾、並開啟 config.txt 的程式,若從別處啟動就會失敗。當精確很重要時,尤其在指令稿和服務裡,寧可用絕對路徑、或明確設定工作目錄,而不要信任程式剛好從哪裡啟動。
在 shell 裡,pwd 印出 /home/alice。現在開啟 notes.txt 會解析成 /home/alice/notes.txt。執行 cd projects 後,工作目錄變成 /home/alice/projects,而同樣的開啟 notes.txt 現在意思是 /home/alice/projects/notes.txt。
cwd 是作業系統加到每條相對路徑前面那個隱藏的前綴。
cwd 是每行程的狀態——在一個程式裡改變它只影響那個程式。因為相對路徑無形地依賴它,為求可靠,在指令稿和服務裡寧可用絕對路徑。