Bash Подскажите, если [$? = 0]; тогда; else и /$ не работает так, как это было

Я знаю, что у меня уже было это работает довольно давно, но я долго не сталкивался со сценариями и подсказками bash, и я не могу придумать решение.

Я пытался использовать, если [$? = 0]; тогда; else ;, чтобы стать другим приглашением, если команда предоставляет ошибку и \$, чтобы получить #, в случае входа root. Я даже придумал эту бессмысленную длинную подсказку:

PROMPT_COMMAND='if [ $? = 0 ]; then PS1="\[\e[31m\]║\[\033[04;35m\]\$(/bin/date)\[\e[00;32m\] History: \! \[\e[31m\]Jobs: \j \[\e[34m\]Status: \[\e[32m\]▇▇ ${debian_chroot:+($debian_chroot)}\n\[\033[31m\]║\[\e[33m\]\u@\[\e[37m\]\w/\[\e[32m\]\$:\[\e[0m\]"; else PS1="\[\e[31m\]║\[\033[04;35m\]\$(/bin/date)\[\e[00;32m\] History: \! \[\e[31m\]Jobs: \j \[\e[34m\]Status: \[\e[31m\]▇▇ ${debian_chroot:+($debian_chroot)}\n\[\e[31m\]║\[\e[33m\]\u@\[\e[37m\]\w/\[\e[32m\]\$:\[\e[0m\]"; fi'

Я знаю, проблема в том, что if [$? = 0]; тогда; еще; часть работает между "", в то время как /$, похоже, работает только между ''.

Самое забавное, что это работает...

PS1="\'if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\'[\u@\h:\w]\\$ "

в то время как это не так (if [\ $? = 0]; then; else;) (\ $ (/bin/date) и \$ работает таким образом)

PS1="\[\033[31m\]║\[\033[04;35m\]\$(/bin/date)\[\033[00;32m\] History: \! \[\033[31m\]Jobs: \j \'if [ \$? = 0 ]; then echo \[\e[34m\]Status: \[\e[32m\]▇▇; else echo \[\e[34m\]Status: \[\e[31m\]▇▇; fi\' ${debian_chroot:+($debian_chroot)}\n\[\033[31m\]║\[\033[33m\]\u@\[\033[37m\]\w/\[\033[32m\]\\$:\[\033[0m\]"

Я хотел бы сохранить оба в моей подсказке, но я, очевидно, что-то пропустил (возможно, потому, что слишком много искал эту подсказку. Я был бы рад получить подсказку, что функции \$ и\$ (/bin/date), при изменении, если произошла ошибка, пожалуйста, помогите.

Приветствия.

1 ответ

Я рекомендую PROMPT_COMMAND запрос из PROMPT_COMMAND, вместо того, чтобы пытаться вставить исполняемый код в значение самого PS1. Это упрощает цитирование, а также разбивает подсказку на управляемые части.

prompt_cmd () {
 exit_status=$?
 PS1='\[\e[31m\]║\[\e[04;35m\]\D{%+}'
 PS1+=' \[\e[32m\]History: \!'
 PS1+=' \[\e[31m\]Jobs: \j'
 PS1+=' \[\e[34m\]Status: '
 if [[ $exit_status = 0 ]]; then
 PS1+='\[\e[32m\]'
 else
 PS1+='\[\e[31m\]'
 fi
 PS1+='▇▇ '"${debian_chroot:+($debian_chroot)}"'\n'
 PS1+='\[\e[31m\]║\[\e[33m\]\u@\[\e[37m\]\w\[\e[32m\]\$:\[\e[0m\]'
}

PROMPT_COMMAND='prompt_cmd'

licensed under cc by-sa 3.0 with attribution.