Тестирование LS_COLORS в zsh

В дополнение к какой сказанный cjm, если значение $? 0, затем предыдущий процесс действительно обычно завершался (или успешно). Иначе была некоторая ошибка.

10
03.11.2011, 00:13
2 ответа

То же, записанное для zsh намного более чистым способом:

#!/bin/zsh

typeset -A names
names[no]="global default"
names[fi]="normal file"
names[di]="directory"
names[ln]="symbolic link"
names[pi]="named pipe"
names[so]="socket"
names[do]="door"
names[bd]="block device"
names[cd]="character device"
names[or]="orphan symlink"
names[mi]="missing file"
names[su]="set uid"
names[sg]="set gid"
names[tw]="sticky other writable"
names[ow]="other writable"
names[st]="sticky"
names[ex]="executable"

for i in ${(s.:.)LS_COLORS}
do
    key=${i%\=*}
    color=${i#*\=}
    name=${names[(e)$key]-$key}
    printf '\e[%sm%s\e[m\n' $color $name
done
7
27.01.2020, 20:02
  • 1
    Вы могли бы хотеть заменить \n пространством в конце printf для компактности, возможно. –  Stéphane Gimenez 15.09.2011, 03:27
  • 2
    Спасибо @Stéphane Gimenez. Я обновил свой OP с проблемой, которую я получаю при печати некоторых символов с помощью сценария. Не уверенный, если это строго связано с Вашим сценарием хотя (это может быть мой собственный терминал?) –  Amelio Vazquez-Reina 01.11.2011, 20:09
  • 3
    @intrpc: выполнение zsh как sh Ваш используют некоторый режим эмуляции. Любой вызов Ваш сценарий как zsh ./test_color_scheme или добавьте двойные кавычки вокруг $color и $name. –  Stéphane Gimenez 02.11.2011, 14:35
  • 4
    @Stéphane Gimenez: Я был направлен здесь от моего связанного вопроса здесь: unix.stackexchange.com/questions/52659 / …. Ваше расширение сокращений очень полезно. У меня есть три сокращения, rs, ca и mh это не включено выше. Можно ли сказать мне, где найти их расширения?Спасибо. –  chandra 24.10.2012, 08:13
  • 5
    , Интерпретируемый от dircolors -p rs=reset, ca=capability, mh=multi-hard_link –  weldabar 03.11.2013, 22:16

Необходимо выйти = в ${i%=*} потому что иначе суффиксный шаблон =* подвергается = расширение, таким образом, = интерпретируется как название команды. Это - причина * not found ошибка.

Zsh не разделяет слова на подстановках переменных по умолчанию, таким образом, $LS_COLORS расширяется до отдельного слова. Иметь for цикл воздействует на разделенные от двоеточия части $LS_COLORS, использовать for i in $=LS_COLORS. Или более идиоматически в zsh, не использовать IFS но вместо этого укажите явно, как разделить: for i in ${(s.:.)LS_COLORS}.

Синтаксис ${!x} означать “значение переменной, имя которой $x” характерно для удара. Zsh имеет эквивалентную конструкцию, P флаг расширения параметра: ${(P)x}.

3
27.01.2020, 20:02
  • 1
    Существует еще две причины этого сценария, не работает в zsh. Никакое автоматическое разделение слова для LS_COLORS и = потребности, которых оставят в шаблонах замены. –  Stéphane Gimenez 15.09.2011, 03:54
  • 2
    @StéphaneGimenez Вы правы, спасибо, я только, совершил нападки на том, где удар нестандартен, но это две нестандартных zsh функции, которые должны быть обращены также. Необходимо развернуть ответ, чтобы иметь все объяснения, и затем я могу удалить мой. –  Gilles 'SO- stop being evil' 15.09.2011, 10:18

Теги

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