Как я могу перечислить LS_COLORS в цвете?

Я не иду в листы это оставшееся без ответа, потому что существует несколько вещей серьезно неправильно с этим сценарием. Однако, потому что я не знаю то, что сценарий, как предполагается, делает, этот ответ не собирается решать Вашу проблему.

  • chdir($directory); может перестать работать. Необходимо обработать ошибку.

    chdir($directory) or die "chdir($directory): $!";
    
  • $files .= "'$filename' " не надлежащее заключение в кавычки на имя файла: это перестанет работать, если имя файла будет содержать a '. Вы могли подготовить имя файла с $filename =~ s/'/'\\''/, но существует на самом деле лучший способ сделать это (см. следующий вопрос).

  • system с отдельным аргументом вызывает оболочку. Но Вы не используете функции оболочки, так вместо этого необходимо использовать форму списка. И тот способ, которым Вы не должны создавать строку, которая собирает все имена файлов: просто используйте список, который Вы уже имеете.

    my @cmd = qw(/usr/bin/tar cvfz);
    system(@cmd, $dest_path, @ARGV);
    
  • Все еще необходимо обработать ошибки от system.

    system(@cmd, $dest_path, @ARGV) or die "Call to $cmd[0] failed with status $?";
    

    Если это - последняя вещь, Ваш сценарий делает, звонит exec вместо этого.

    exec(@cmd, $dest_path, @ARGV) or die "exec $cmd[0] failed: $!";
    

До сих пор Вы могли сделать все это легко в оболочке.

#!/bin/sh
set -e
cmd='tar cvzf'
dest_path='Archive.tgz'
cd -- "$(dirname -- "$0")"
echo "$cmd $dest_path $*"
exec $cmd "$dest_path" "$@"

5
24.10.2012, 01:10
2 ответа

Попробуйте этот сценарий:

( # Run in a subshell so it won't crash current color settings
    dircolors -b >/dev/null
    IFS=:
    for ls_color in ${LS_COLORS[@]}; do # For all colors
        color=${ls_color##*=}
        ext=${ls_color%%=*}
        echo -en "\E[${color}m${ext}\E[0m " # echo color and extension
    done
    echo
)

Вывод:

output screenshot

6
27.01.2020, 20:39
  • 1
    . Я помню только расширения файла, обнаруживающиеся в их соответствующих цветах. Я должен привести в порядок некоторое рытье для понимания что IFS все же. –  chandra 23.10.2012, 21:48

Эта версия имеет некоторую дополнительную информацию и не окрашивает все линии:

eval $(echo "no:global default;fi:normal file;di:directory;ln:symbolic link;pi:named pipe;so:socket;do:door;bd:block device;cd:character device;or:orphan symlink;mi:missing file;su:set uid;sg:set gid;tw:sticky other writable;ow:other writable;st:sticky;ex:executable;"|sed -e 's/:/="/g; s/\;/"\n/g')           
{      
   IFS=:     
   for i in $LS_COLORS     
    do        
        echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m" 
    done       
}

Часть Ответ @ Karthick87 на Askubuntu
Также см. Этот ответ: Что вызывает этот зеленый фон в LS-выходе?

0
27.01.2020, 20:39

Теги

Похожие вопросы