Я понимаю, что это старая тема, но я только что начал работать с функциями.Хитрость заключается в том, чтобы разделить печатную и непечатаемую части функции так, чтобы вы могли правильно заключить непечатаемые части в [].Обычно мне нравится, когда моя строка ERROR .. отделена (и это не проблема), но это также работает правильно, если все в одной строке.
Обратите внимание, что я возвращаю предыдущий $?значение из каждой вложенной оболочки, так что $?передается от одного к следующему.
PS1="\n\
\[\`
cja_prv_retval=\$?;
if [ \$cja_prv_retval != 0 ];
then echo -ne \$E_ERROR;
fi
exit \$cja_prv_retval
\`\]\
\`
cja_prv_retval=\$?;
if [ \$cja_prv_retval != 0 ];
then echo -ne \"ERROR: RETURN CODE \$cja_prv_retval\";
fi
exit \$cja_prv_retval
\`\
\[\`
cja_prv_retval=\$?;
if [ \$cja_prv_retval != 0 ];
then echo -ne \$E_RESET;
fi
exit \$cja_prv_retval
\`\]\
${P_RESET}${P_GRAY}\! \t ${P_RED}\u${P_GRAY}@${P_GREEN}\h ${P_YELLOW}\w ${P_CYAN} ══>${P_RESET} "
Это дает мне либо
2021 12:28:05 cja@morpheus04 ~ ══>
, если нет ошибки, либо
ERROR: RETURN CODE 1 2021 12:28:16 cja@morpheus04 ~ ══>
, если естьошибка.Все правильно расположено (редактирование многострочной истории работает правильно).