номер команды bash (\ #) эквивалентен в zsh

431
shrx

Я ищу персонаж, чтобы положить в моем zsh«с, $PROMPTчто было бы эквивалентно bash» с \#( командой номер этой команды, в соответствии с этим сайтом ). Пока я нашел только, %hно это не то, что я ищу, это эквивалентно \!.

3

1 ответ на вопрос

1
mpy

Поскольку вы уже просмотрели соответствующую справочную страницу и не нашли ничего подходящего, я представлю альтернативный метод:

  1. setopt PROMPT_SUBST, поэтому расширение параметров, подстановка команд и арифметическое расширение выполняются в приглашениях.

  2. Увеличьте значение varable cmdcount(инициализируется 1) для каждой выполняемой команды с помощью preexecловушки: выполняется сразу после того, как команда прочитана и собирается быть выполнена. (...)

  3. Используйте $cmdcountв своем приглашении.


Скопируйте и вставьте код для вашего ~/.zshrc:

setopt PROMPT_SUBST [[ $cmdcount -ge 1 ]] || cmdcount=1 preexec() { ((cmdcount++)) } PS1='$cmdcount ' # notice the single(!) tics 

А вот как это работает (слева = bashс \#в PROMPT, справа = zshс предложенным кодом):

bash$ PS1="\# " | zsh$ source ./above_code 2 /bin/echo some external command | 1 /bin/echo some external command some external command | some external command 3 cd internal command | 2 cd internal command bash: cd: internal: No such file or directory | cd: string not in pwd: internal 4 [no command, just pressed enter] | 3 [no command, just pressed enter] 4 | 3  4 | 3 

Я не знаю о специфическом поведении \#в bash, но на первый взгляд обе оболочки теперь ведут себя одинаково.

Нет способа отключить сброс, если я снова получу исходный код `.zshrc`? shrx 10 лет назад 0
@shrx: Хорошо, я улучшил свой код. Вероятно, вам даже не нужно устанавливать начальное значение для `cmdcount`, однако, я чувствую себя лучше, если так`;) `. mpy 10 лет назад 1