bashs Befehlsnummer (\ #) entspricht in zsh

505
shrx

Ich bin auf der Suche nach einem Zeichen, in das mein zsheinzutragen ist $PROMPT, das dem von bashs entspricht \#( die Befehlsnummer dieses Befehls gemäß dieser Site ). Bisher habe ich nur gefunden, %haber das ist nicht das, wonach ich suche, es entspricht \!.

3

1 Antwort auf die Frage

1
mpy

Da Sie bereits die entsprechende Manpage durchgesehen haben und nichts passendes gefunden haben, stelle ich eine alternative Methode vor:

  1. setopt PROMPT_SUBST, Also Parameter, Kommando - Substitutionen und arithmetische Expansion in Aufforderungen durchgeführt.

  2. cmdcountFür jeden ausgeführten Befehl über den preexecHook eine Variable (mit 1 initialisiert) inkrementieren: Wird ausgeführt, nachdem ein Befehl gelesen wurde und gerade ausgeführt wird. (...)

  3. Verwenden Sie $cmdcountin Ihrer Eingabeaufforderung.


Code kopieren und einfügen für ~/.zshrc:

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

Und so funktioniert es (links = bashmit \#in PROMPT, rechts = zshmit vorgeschlagenem Code):

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 

Ich weiß nicht über das spezifische Verhalten \#in bash Bescheid, aber auf den ersten Blick verhalten sich beide Shells jetzt ähnlich.

Es gibt jedoch keine Möglichkeit, das Zurücksetzen zu deaktivieren, wenn ich `.zshrc` erneut sende. shrx vor 10 Jahren 0
@shrx: Guter Punkt, ich habe meinen Code verbessert. Wahrscheinlich müssen Sie nicht einmal einen Anfangswert für "cmdcount" festlegen. Ich habe jedoch ein besseres Gefühl, wenn Sie ";)" tun. mpy vor 10 Jahren 1