Zsh
ls:當文件由root擁有時,為“user”和“group”列使用不同的顏色
使用時
ls -lAhF
,第 3 列和第 4 列是使用者和組所有權,即:drwxrwxrwt 2 root root 60 Nov 15 15:50 .X11-unix/ srwxr-xr-x 1 marti marti 0 Nov 15 15:51 .menu-cached-:0-marti= srwxr-xr-x 1 marti marti 0 Nov 15 15:51 .pcmanfm-socket--0-marti= drwxr-xr-x 4 root root 80 Nov 15 15:50 dtach/ drwx------ 2 marti marti 40 Nov 16 17:36 mc-marti/ drwx------ 2 root root 40 Nov 16 20:25 mc-root/
我想在第 3 列和第 4 列中將關鍵字“root”塗成紅色,以便我可以輕鬆地看到該文件歸 root 所有。
因此,如果使用者組不是 root 使用者,一切看起來都和以前一樣
如果使用者是root,則第三列中的關鍵字“root”為紅色。同樣對於組根。
我怎麼能那樣做? 我使用’zsh’作為我的外殼。
我不認為
ls
有可能配置它。但是我可以在其中使用一些別名/函式zsh
嗎?
以下函式將
root
在 ’ 的輸出中出現的任何位置以紅色顯示,ls
後跟一個空格:ls() { if [ -t 1 ]; then command ls --color=always "$@"| sed "s/root /$(tput setaf 1)root$(tput sgr0) /g" else command ls "$@" fi }
這將
root
在使用者和組列中匹配,但在包含“root
”(帶空格)的文件中也會匹配,因此它可能不是您想要的。強制顏色輸出至少會確保它不匹配名為“root”的文件。
sed
呼叫可以使用 Zsh 特定的功能,而不是tput
:
echoti
:sed "s/root /$(echoti setaf 1)root$(echoti sgr0) /g"
- 提示擴展:(
sed "s/root /${(%):-%F{red}root${(%):-%f} /g"
是的,第一個大括號不平衡)colors
(autoload colors; colors
):sed "s/root /${fg[red]}root${reset_color} /g"
如果您的終端支持超過 16 種顏色,您可以使用更大的值與
setaf
.%F{red}
也可以使用數值。該nearcolor
模組提供了一種簡單的方法來找到與所需 RGB 值最接近的匹配顏色。如果您有一個現有的
ls
alias, setting--color=tty
,您需要禁用它,否則--color=tty
將--color=always
在ls
呼叫之後出現,並且ls
自己的著色將被禁用。