Тонін вказав на помилку в моєму запиті за замовчуванням . Мінімальний приклад:
Встановити PS1:
PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " ")$ '
На даний момент підказка виглядає приблизно так:
$
Тепер запустіть вихідний код запуску:
false
Тепер підказка містить вихідний код червоним кольором на початку рядка:
1 $
- Натисніть Ctrl- r.
Введіть "false". Тепер запит містить лише пошук:
(reverse-i-search)`false': false
- Натисніть Enter.
Отримана історія терміналу тепер містить наступне:
1 $ch)`false': false
Очікуваний вихід:
1 $ false
Тобто, схоже, що результат пошуку історії змішується з підказкою та приховує фактичну команду, яку виконували.
Я спробував обійти це, використовуючиPROMPT_COMMAND
:
set_exit_code() {
exit_code=$?
[[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " "
}
set_bash_prompt() {
PS1='$(set_exit_code)$ ' # Double quotes give the same result
}
PROMPT_COMMAND=set_bash_prompt
Схоже, це не працює - лінія виглядає точно так само, як і раніше після пошуку та запуску.
Як я можу це виправити?