From 16e52b28668a60ab6e76f825badb379190483378 Mon Sep 17 00:00:00 2001
From: Viorel Munteanu <ceamac@gentoo.org>
Date: Sun, 13 Oct 2024 12:15:36 +0300
Subject: [PATCH] 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 and 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>
---
src/subshell/common.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/subshell/common.c b/src/subshell/common.c
index 72f0015690..f4fba69dd6 100644
a
|
b
|
init_subshell_precmd (char *precmd, size_t buff_size) |
1090 | 1090 | " bind -x '\"\\e" SHELL_BUFFER_KEYBINDING "\":\"mc_print_command_buffer\"'\n" |
1091 | 1091 | " bind -x '\"\\e" SHELL_CURSOR_KEYBINDING |
1092 | 1092 | "\":\"echo $BASH_VERSINFO:$READLINE_POINT >&%d\"'\n" |
1093 | | " PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND\n}'pwd>&%d;kill -STOP $$'\n" |
| 1093 | " if test ${BASH_VERSION%%%%.*} -ge 5 && [[ ${PROMPT_COMMAND@a} == *a* ]] 2> /dev/null; then\n" |
| 1094 | " eval \"PROMPT_COMMAND+=( 'pwd>&%d;kill -STOP $$' )\"\n" |
| 1095 | " else\n" |
| 1096 | " PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND\n}'pwd>&%d;kill -STOP $$'\n" |
| 1097 | " fi\n" |
1094 | 1098 | "PS1='\\u@\\h:\\w\\$ '\n", command_buffer_pipe[WRITE], |
1095 | | command_buffer_pipe[WRITE], subshell_pipe[WRITE]); |
| 1099 | command_buffer_pipe[WRITE], subshell_pipe[WRITE], subshell_pipe[WRITE]); |
1096 | 1100 | break; |
1097 | 1101 | |
1098 | 1102 | case SHELL_ASH_BUSYBOX: |