Невозможно получить доступ к переменной номера истории HISTCMD из сценария PROMPT_COMMAND - PullRequest
1 голос
/ 15 апреля 2020

Во всех версиях bash, которые я пробовал (3, 4, 5), я не могу получить доступ к номеру истории команд (специальная переменная HISTCMD) в контексте выполнения PROMPT_COMMAND. Как ни странно, он каждый раз оценивается в 1.

bash-5.0$ echo $BASH_VERSION
5.0.11(1)-release

# Set up the prompting. Takes effect immediately.
bash-5.0$ PROMPT_COMMAND='echo In PROMPT_COMMAND. PID: ${$} HISTCMD: ${HISTCMD}'
In PROMPT_COMMAND. PID: 96047 HISTCMD: 1

# Interactively we can get the variable, but right after, when PROMPT_COMMAND runs, nope
bash-5.0$ echo Interactively: PID: ${$} HISTCMD: ${HISTCMD}
Interactively: PID: 96047 HISTCMD: 67
In PROMPT_COMMAND. PID: 96047 HISTCMD: 1

# Meanwhile it continues to increment interactively. PROMPT_COMMAND is not in a forked subprocess.
bash-5.0$ echo Interactively: PID: ${$} HISTCMD: ${HISTCMD}
Interactively: PID: 96047 HISTCMD: 68
In PROMPT_COMMAND. PID: 96047 HISTCMD: 1

Это не значит, что PROMPT_COMMAND изолирован от мета-переменных. $_ работает просто отлично, например. Также не представляется возможным использовать спецификатор формата приглашения PSn \#.

...