Если вы хотите запустить что-то , пока у него не будет нулевого кода возврата,
until [ $RANDOM -eq 42 ]
do
echo looking for the answer to life, the universe, and everything
done
(или в виде одного -вкладыша)
until [ $RANDOM -eq 42 ]; do echo looking for the answer to life, the universe, and everything; done
Для вашего примера:
until./fetch_remote_work.sh; do :; done
Этот цикл «ничего не делает» (выполняет:
встроенную функцию)до fetch _удаленного _сценария work.sh, возвращающего 0.
В zsh
вам не нужно жестко кодировать управляющие последовательности, поскольку в нем есть несколько встроенных способов установки цвета фона и переднего плана.
Вы можете использовать от echoti setaf
до set
терминала a
nsi f
цвет руды и echoti setab
для установки b
фонового цвета(setaf
и setab
являются именами соответствующих t
эмм i
nfo возможности)
Предполагая, что ваш терминал поддерживает 256 цветов (, так как основанные на VTE -, такие как ваш терминатор gnome -do )и $TERM
, правильно установлено значение, которое идентифицирует запись terminfo с правильным выходом последовательности для этого, он должен работать.
$ echoti setab 196 | sed -n l
\033[48;5;196m$
Или вы можете использовать расширение подсказки с помощью print -P
или флаг расширения параметра %
и:
$ print -rP '%K{196}' | sed -n l
\033[48;5;196m$
(здесь sed -n l
используется для отображения соответствующей escape-последовательности, которая отправляется, $
просто показывает, где заканчивается строка, это не часть вывода, \033
— GNU sed
l
командное представление символа ESC (с восьмеричным значением 033 байта в ASCII))
Некоторые терминалы (, в том числе терминалы на основе VTE -, такие как терминатор gnome -), также поддерживают спецификации RGB. На тех,ты мог бы сделать
$ print -rP '%K{#ffffff}' | sed -n l
\033[48;2;255;255;255m$
(здесь с fffffff
для ярко-белого, поскольку это ff
максимальное значение для всех красных, зеленых и синих компонентов ). В этом случае zsh
жестко кодирует последовательность стилей xterm -(, см. там для фона ), поскольку нет соответствующей возможности terminfo. Хотя это и не стандарт , в настоящее время он наиболее широко поддерживается в современных эмуляторах терминала FLOSS.
%K
задает цвет фона, %F
— цвет переднего плана. %k
/ %f
восстановить цвет по умолчанию.
Для терминалов, которые не поддерживают это, но поддерживают 88 или 256 цветовую палитру, zsh
также имеет модуль zsh/nearcolor
, чтобы получить цвет, наиболее близкий к этой спецификации RGB:
$ zmodload zsh/nearcolor
$ echoti colors
256
$ print -rP '%K{#ffffff}' | sed -n l
\033[48;5;231m$
(здесь цвет 231 на моем 256-цветном терминале ближе всего к ярко-белому, на самом деле он ярко-белый ).
Если у вас есть доступ к файлу X11 rgb.txt
, вы также можете определить ассоциативные массивы для каждого из имен цветов X11 с чем-то вроде:
typeset -A X11_bg X11_fg
while read -r r g b c; do
[[ $r = [0-9]* ]] || continue
printf -v hex %02x $r $g $b
X11_fg[$c]=${(%):-%F{#$hex}}
X11_bg[$c]=${(%):-%K{#$hex}}
done < /etc/X11/rgb.txt
X11_bg[default]=${(%):-%k} X11_fg[default]=${(%):-%f}
(Системы, подобные Debian -, имеют /etc/X11/rgb.txt
как часть пакета x11-common
).
Для таких вещей, как:
print -r "$X11_bg[dark olive green]text$X11_bg[default]"
Подробнее см.:
man 5 terminfo
info zsh echoti
info zsh print
info zsh "Prompt Expansion"
info zsh "The zsh/nearcolor Module"
(имейте в виду, что в некоторых системах вам необходимо установить пакет zsh-doc
или его аналог, чтобы страницы info
стали доступными ).