2017-02-09 29 views
2

如果我創建通過古怪的行爲與符號連接的端片

ln -s /path/to/linked/dir current/path/link_name 

一個符號鏈接,並通過

cd link_name 

目錄更改爲current/path/link_name然後我可以檢查我在哪裏使用PWD命令。輸出將是

current/path/link_name 

但是,如果使用某種終端模擬器,如終止,或的konsole別人,我可以分割選項卡或創建在同一目錄中的新選項卡。在新創建的選項卡中,pwd命令的輸出將爲

/path/to/linked/dir 

在許多情況下,這樣做並不方便。有人知道如何在一些終端仿真器中改變這種行爲嗎?

P.S.我也注意到從/current/path/link_name輸入的ls的輸出與從/path/to/linked/dir輸入的ls的輸出相同。

回答

0

終結者1.90做你想做的。在一個示例會話:

$ cd -- "$(mktemp --directory)" 
$ mkdir a 
$ ln -s a b 
$ cd b 

Ctrl鍵 - - ë(或Ò,或)。在這一點上,我仍然在b

+0

正如l0b0所提到的那樣,垂直和水平分割保留了工作目錄,但新標籤取到了終止符中的原始目錄 –

+0

新標籤與此處分割完全相同。這就是爲什麼我提到「Ctrl-Shift-t」。 – l0b0

+0

根本不適合我。你在使用什麼操作系統? –

1

你不能。原因是你失去了系統調用執行後你是如何到達那裏的信息。一些終端仿真器和主要是bash(1)外殼試圖記住這一點,並實施pwd作爲內部命令,以應對這種情況。但總的來說,如果你嘗試

/bin/pwd 

你會發現,所有關於你是怎麼到最終的目錄中的信息在時間過程中丟失了。

問問自己,如何能在/bin/pwd工作,怎麼能確定你的目錄,你會回答自己的問題:

系統維護一個當前目錄(該pwd命令從繼承此它的父外殼)存儲在每個進程的系統數據中,但爲了節省資源,它只存儲實際上是你當前目錄的目錄的inode號(實際上並不是它維護着對in-core inode結構的引用)。它不存儲您用於查找它的路徑,並且它僅存儲該信息以便在打開文件時要求相對路徑時獲得起點。問題與確定多個鏈接文件屬於哪個目錄相同...沒有父目錄存儲爲一個文件,因爲它可以在多個目錄鏈接到它所有在同一時間 ...這對於目錄也是如此,但是他們自己內部有一個鏈接到其父母的..條目(他們的真父母,因爲一個目錄現在可以通過正常鏈接被允許屬於不同的目錄,這是系統禁止的,並通過mkdir(2)系統調用來保證)pwd(1)命令精確地使用這些鏈接來查找父目錄(然後通過搜索當前目錄的inode號找到父目錄中的當前目錄,直到該算法導致到同一個inode(根目錄有這個特殊的特徵,其..條目再次指向自己),所以它停止上升。 pwd只能工作,因爲它跟在目錄下,並且從來沒有文件。