Zsh

ls:當文件由root擁有時,為“user”和“group”列使用不同的顏色

  • November 18, 2019

使用時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=alwaysls呼叫之後出現,並且ls自己的著色將被禁用。

引用自:https://unix.stackexchange.com/questions/552599