3

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

1 ответ1

1

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

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

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

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


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

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

И вот как это работает (left = bash с \# в PROMPT , right = 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, но на первый взгляд обе оболочки теперь ведут себя одинаково.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .