Я ищу символ для вставки zsh
моего $PROMPT
который был бы эквивалентен bash
's \#
(номер команды этой команды, согласно этому сайту). Пока я нашел только %h
но это не то, что я ищу, это эквивалентно \!
,
1 ответ
Поскольку вы уже просмотрели соответствующую справочную страницу и не нашли ничего подходящего, я представлю альтернативный метод:
setopt PROMPT_SUBST
, поэтому расширение параметров, подстановка команд и арифметическое расширение выполняются в приглашениях.Увеличьте переменный
cmdcount
(инициализированный с 1) для каждой выполненной команды черезpreexec
: Выполняется сразу после того, как команда прочитана и готовится к выполнению.(...)Используйте
$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, но на первый взгляд обе оболочки теперь ведут себя одинаково.