Pull to refresh
40
0
Павлов Николай Александрович @ZyXI

Инженер

Send message
Нет, не работает. Запускать надо используя zsh scriptname, иначе запуститься bash. Зато в zsh работает
for ((i=0; i<3; i++)) {
    echo $i
}
А в debian, насколько я помню, к /bin/dash. Может уже изменили, но раньше такое точно было. Судя по списку файлов данного пакета — так и не изменили.
Изначально он ориентирован на любые терминалы — не только поддерживающие 256 цветов, поэтому некоторые цвета могут выглядеть не так, как нам нравится, но это можно исправить. Главный файл с настройками цветов располагается по пути:
/usr/share/zsh/plugins/zsh-syntax-highlight/highlighters/main/main-highlighter.zsh
Измените цвета так, как вам нужно.
Пример:

: ${ZSH_HIGHLIGHT_STYLES[hashed-command]:=fg=153}
…


Ни в коем случае не делайте это сами и не никогда рекомендуйте никому изменять файлы, контролируемые пакетным менеджером. Скажите, вы разве никогда не видели раньше : ${VAR:=val}? Эта конструкция буквально означает «записать val в переменную VAR, если последняя пуста или не определена». То есть не надо ничего менять в /usr/share, просто определите эти переменные до строки
source /usr/share/zsh/site-contrib/zsh-syntax-highlighting.zsh
и всё.

Точнее, не переменные, а ассоциативный массив с нужными ключами:
typeset -A ZSH_HIGHLIGHT_STYLES
ZSH_HIGHLIGHT_STYLES=(
        'alias'           'fg=green,bold'
        'builtin'         'fg=yellow'
        'function'        'fg=blue,bold'
        'command'         'fg=green'
        'hashed-commands' 'fg=green,underline'
        'precommand'      'fg=cyan'
        'path'            'underline'
)

Если интересно, у меня есть скрипт, который выдаёт список из #RRGGBB кодов всех цветов для текущего терминала. Для работы требуется Vim, wmctrl (желательно), perl, YAML::XS, imagemagick (консольные команды и perl bindings). Желательно, чтобы окно терминала не имело декораций. Код, определяющий месторасположение таблицы цветов, по идее, должен работать с почти всеми декорациями, но медленно. Для работы также требуется, чтобы чёрный фон отличался от белого. Никаких более требований нету.

Там же — списки цветов для используемых мною терминалов (откуда я взял default-8 уже не помню, у wineconsole цвета другие). Цвета у всех используемых мною эмуляторов (rxvt-unicode USE+=256-color, xterm, konsole) везде одинаковые, первые 16 цветов у konsole отличаются (и настраиваются). Насколько мне известно, как минимум xterm позволяет настраивать вообще все цвета.
Зачем мне if, если можно просто иметь приглашение, которое работает везде?

Как сделать в bash такое же приглашение, как в zsh, я легко могу решить. Но это не добавит возможностей zsh в bash.
Относительно PS1 в других оболочках — я в этом отношении предпочитаю оставить приглашение по‐умолчанию или, в любом случае, отличное от того, что у меня в zsh, чтобы оно всегда напоминало мне о том, что это другая оболочка, в которой недоступны привычные мне возможности zsh.
Накатить для логов — нет. Когда меня попросили добавить в formatvim вывод с помощью ANSI escape последовательностей, мне тоже пришлось с этим разбираться. А вот писать PS1 в таком виде я бы никогда не стал. Точно так же, как не стал бы использовать в PS1 что‐то, кроме первых 16 цветов — мне ещё случается работать во framebuffer.
Ну и PS1, конечно, переписан с нуля.

Не мучайте себя, возьмите zsh. Здесь цвета сокращаются до %F{blue}…%f/%K{blue}…%k (только первые 16, остальные имеют число вместо имени) (Foreground, bacKground), %B…%b для жирного, %U…%u — подчеркнутого и %S…%s — инверсного (похоже zsh не предоставляет возможности сделать текст наклонным с помощью %{char}. Не представляет проблемы, так как konsole и xterm всё равно это не поддерживают, только urxvt).
Сертификат выдан на hosting provider’а. Сомневаюсь, что дело в какой‐либо proxy.
Эм. Я не говорил, что провайдер подменяет сертификаты. Я говорил, что сайт работает по HTTPS, если игнорировать предупреждение (сертификат выдан на fatcow.com — hosting provider, который, похоже, и держит этот сайт).
У меня нет — адреса одни и те же, но не работают только legalki (и только по HTTP, HTTPS работает).
OnLime. Bookscan открывается, legalki нет. Способ блокировки не знаю, но traceroute туда идёт, curl скачивать что‐либо отказывается (http). По HTTPS всё работает, если игнорировать предупреждение о неверном сертификате.
Мне бы тоже не пришло в голову исправлять эту проблему этим способом. Но строки «3.1» в начале сообщения было достаточно, чтобы понять, что это уточнение к моему третьему пункту. В третьем пункте говорилось о том, что не надо использовать MC для запуска скриптов, соответственно напрашивается единственное толкование. Предположение о том, что та команда являлась примером скрипта с деструктивным поведением, противоречит контексту беседы: «3.1» в начале и вообще весь мой комментарий, на который, собственно, отвечали, не предполагают возможности данного толкования.
Нет. vlivyur привёл решение, которое, по его мнению должно было запретить запуск чего‐либо по нажатию в MC (для текущего каталога) (во всяком случае, я так понял).
Я указал, что данное решение также запретит использование всех подкаталогов, затем Frosty показал, как можно этого избежать.
Ваш комментарий к ответу Frosty был воспринят как попытка указать на лучший способ решения проблемы (никаких явных указаний, что вы хотите этим способом повредить систему в нём нет, а других причин иметь именно такой комментарий именно к тому ответу я не вижу).
Поэтому sledopit указал, что это просто усугубляет проблему.
Вы, очевидно, не поняли, что sledopit хотел этим сказать, так как указанное им поведение наблюдается при запуске от пользователя.
Поэтому я уточнил, о чём там идёт речь.

Теперь вы говорите, что кто‐то говорил о том, как повредить систему, хотя ни в каком из предшествовавших вашему комментариев это не предполагалось.

Вот этот
Да, упустил это, но смысл решения понятен.
комментарий vlivyur ясно указывает на то, что речь не шла о повреждении системы.
Речь о том, что ваш вариант запретит использование большего числа каталогов вместо того, чтобы решить проблему, только и всего.
  1. Возможно первое правило действительно нуждается в лучшей формулировке. Да, у меня тоже не все скрипты просят подтверждения. Ключевые слова «выполняют действия» — это именно то, что Вы называете деструктивным поведением.
    Зачем нужны скрипты, которые не выполняют действия?

    То, что я называю «деструктивным поведением» — это поведение, в результате которого безвозвратно теряются данные. Это не bunzip file.bz2/bzip2 file — оно обратимо. Это не загрузка скриншотов на Яндекс.Фотки, отмонтирование, убийство operapluginwrapper, печать файла как книги на принтере или даже удаление сокетов dtach (даже если всех, включая соответствующие рабочим процессам) (dtach — аналог screen, из которого выпилен весь функционал за исключением возможности работы после убийства эмулятора терминала/ssh сессии и возможности переприсоединения).
  2. Я пока не нашел универсального способа именования скриптов… Поделитесь.
    Именуйте так, как вам будет понятно. Более универсального принципа я не знаю.
  3. Я пользуюсь mc 12 часов в сутки. И он у меня по Enter не только запускает скрипты, но и открывает почти все файлы. Не говоря обо всех его остальных возможностях. Это такой удобный и естественный инструмент, что мне как-то даже нечего сказать по поводу «автодополнения в консоли».
    Естественным он быть не может, равно как и консоль и вообще все интерфейсы.

    Относительно удобства — опишите любой use‐case и я скажу, как это сделать быстрее в консоли с автодополнением. Единственный случай, когда mc является удобным — это когда я не помню, что находится в конкретном каталоге. Так как единственные каталоги, про которые я этого не помню — это то куда скачиваются torrent’ы, а все операции сводятся к изредка используемым aplayer /mnt/files/torrent/Series/Common\ series\ prefix\ <->\ *.mkv (можно и просто …/*.mkv, но в этом случае при случайном выходе из mplayer сложнее сказать, что хочешь смотреть все серии, начиная со, скажем, 15‐й. А так <-> заменяется на <15->), то иметь mc ради такого случая мне кажется странным. Кроме того, мне не понятно, как в случае запуска с N‐й серии мне поможет mc.
set -e это очень хорошо, но неиспользование стандартных переменных должно быть условным рефлексом. В данном конкретном примере ничего не будет удалено, поскольку оболочка не будет знать, где искать rm.
Таким образом вы запретите использование всех подкаталогов.
Не знаю, откуда вы взяли совет 1. Я бы написал наоборот:

  1. Никогда ничего не спрашивайте, если действие, производимое скриптом, не деструктивно по сути и притом работает с резервной копией. Если деструктивно, но не трогает резервную копию тоже не спрашивайте, при исполнении следующих правил риска никакого, а вопросы раздражают.
  2. Давайте нормальные имена скриптам и всегда добавляйте документацию, если сам скрипт не умещается на экране.
  3. Для того, чтобы запустить именно нужный скрипт, есть консоль и автодополнение в ней. Никогда не запускайте что‐либо по нажатию в MC.
Это соглашение, а не привычка, конкретное направление меняет только знаки в формулах. Когда важно что именно, как и куда двигается, про ток не говорят. Тем более, что такое не движение не является невозможным, если, к примеру, среда, в которой ток проходит — раствор, а носители заряда — положительные ионы.

Information

Rating
5,691-st
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity