Ticket #4599: add support for bash PROMPT_COMMAND being an array

Starting with bash 5.1, PROMPT_COMMAND can be an array. Detect this
case and append an entry to the array instead of appending to a string.

Testing for bash >= 5 is sufficient, because the @a operator exists in
5.0. We need eval on the "then" branch because bash 1.x cannot even
parse that line (it does not support arrays).

Bug: https://bugs.gentoo.org/930401
Suggested-by: kfm@plushkava.net
Signed-off-by: Viorel Munteanu <ceamac@gentoo.org>
Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
This commit is contained in:
Viorel Munteanu 2024-10-13 12:15:36 +03:00 committed by Yury V. Zaytsev
parent fc3ad53228
commit 18f0a28501

View File

@ -1100,9 +1100,13 @@ init_subshell_precmd (char *precmd, size_t buff_size)
" bind -x '\"\\e" SHELL_BUFFER_KEYBINDING "\":\"mc_print_command_buffer\"'\n"
" bind -x '\"\\e" SHELL_CURSOR_KEYBINDING
"\":\"echo $BASH_VERSINFO:$READLINE_POINT >&%d\"'\n"
" PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND\n}'pwd>&%d;kill -STOP $$'\n"
" if test ${BASH_VERSION%%%%.*} -ge 5 && [[ ${PROMPT_COMMAND@a} == *a* ]] 2> /dev/null; then\n"
" eval \"PROMPT_COMMAND+=( 'pwd>&%d;kill -STOP $$' )\"\n"
" else\n"
" PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND\n}'pwd>&%d;kill -STOP $$'\n"
" fi\n"
"PS1='\\u@\\h:\\w\\$ '\n", command_buffer_pipe[WRITE],
command_buffer_pipe[WRITE], subshell_pipe[WRITE]);
command_buffer_pipe[WRITE], subshell_pipe[WRITE], subshell_pipe[WRITE]);
break;
case SHELL_ASH_BUSYBOX: