顯示符號連結的內容
在
zsh
中,我建立了一個符號連結$ ln -s ~/Documents symboliclink
然後我想知道這個符號連結裡面有什麼。
$ ls -l symboliclink > lrwxrwxrwx 1 user user 21 Oct 10 15:56 symboliclink -> /home/user/Documents
這僅顯示符號連結,而不顯示其中的內容。如果我
ls
只使用,它會列出內容,但如果我使用-l
標誌,它不會。這適用於bash
forls
和ls -l
. 我怎樣才能得到這種行為zsh
呢?
zsh和bash
ls -l
之間的輸出看似不同的一個可能原因是使用-completion 並在zsh中啟用(這是預設設置)。Tab``AUTO_REMOVE_SLASH
AUTO_REMOVE_SLASH <D>
如果完成後產生的最後一個字元是斜杠,而鍵入的下一個字元是單詞分隔符、斜杠或結束命令的字元(例如分號或 & 號),請刪除斜杠。
鍵入 時
ls -l symb``Tab
,兩者zsh
和bash
都將完成此操作ls -l symboliclink/
(注意/
末尾的)。不同之處在於zsh
(啟用AUTO_REMOVE_SLASH
)將刪除斜線,如果你只是按下Enter
(即結束命令)那裡。因此,您將有效地
ls -l symboliclink/
在bash中執行,它告訴ls -l
您查看連結後面。但是在zsh中,您將執行ls -l symboliclink
,它告訴ls -l
您要查看有關連結而不是目標目錄的資訊。
ls
沒有選項-l
將始終顯示目標目錄的內容,無論/
最後是否有一個。為了讓zsh
TAB
在末尾不刪除斜杠,只需在-completion之後顯式鍵入它就足夠了。通常這不會明顯改變已完成的文本,但如果您鍵入空格或確認命令,/
則會保留。“通常”,因為可以為自動添加的後綴字元設置突出顯示,例如洋紅色和粗體:zle_highlight[(r)suffix:*]="suffix:fg=magenta,bold"
(注意:使用外部ZSH 語法高亮外掛時,這可能不起作用)
另一種解決方案是(顯然)禁用
AUTO_REMOVE_SLASH
. 這可以通過setopt noautoremoveslash
這是
ls
選項-H
:ls -lH symboliclink
來自
man 1p ls
:-H
如果在命令行上指定了引用目錄類型文件的符號連結,則 ls 應將文件資訊和文件類型評估為連結所引用文件的資訊和文件類型,而不是連結本身;但是, ls 應寫入連結本身的名稱,而不是連結引用的文件。
另請注意選項 -L
-L
評估所有符號連結的文件資訊和文件類型(無論是在命令行上命名還是在文件層次結構中遇到)是連結引用的文件,而不是連結本身;但是, ls 應寫入連結本身的名稱,而不是連結引用的文件。當 -L 與 -l 一起使用時,以長格式寫入符號連結的內容(參見 STDOUT 部分)。