2013-08-12 1 views
0

Как получить значение exit из предыдущей команды в моей подсказке bash? Я хочу это сделать, потому что я также хочу включить текущую ветвь git в свой путь, а также что изменения $?Захват значения выхода предыдущей команды в приглашении bash

Я пробовал несколько вариантов в следующем запросе (например, `,` и $() вокруг присваивание RETVAL), но RETVAL пусто во всех из них:

PS1="\$(RETVAL=$(echo \$))\$(cd 124123)retval: $RETVAL" 

команда кд внутри просто заполнитель для вызова текущей функции ветви мерзавца, и я вторя RetVal потом (это всегда пустую строку для проверки, если она назначена.

Другие вопросы, похожие/релевантные:

Я также попытался установить RetVal в командной строке, используя примеры, как на этих страницах, но ничего не отображается в командной строке

ответ

3

сделать функцию, которая генерирует ваш запрос, и сохранить $?:

makeprompt() { 
    status=$? 
    echo "$(echo someoutput) $status" 
    return $status 
} 

PS1='$(makeprompt) \$ ' 

Это даст вам как вывод команды (здесь echo, но может быть git), и статус выхода из ранее выполненная команда.

+0

Спасибо, что предложили этот ответ - я думаю, что у меня есть большая часть пути. Проблема в том, что путь bash не обрабатывается должным образом. Например. У меня есть: 'makeprompt() {echo =" \ n $ "}' (с правильным пробелом в коде), но он буквально устанавливает мою строку в строку «\ n $» и не ставит перед ней пустую новую строку. Конечно, мое текущее приглашение более сложное, чем это, с цветовыми кодами и функцией разбора ветвей git, но оно не подходит в этом поле комментариев. Тем не менее, это терпит неудачу. Редактировать: толкаемый возврат, а не сдвиг-возврат, и отправил комментарий раньше – cfogelberg

+1

Специальные переменные PS1 (например, '\ $' в этом примере) должны быть указаны буквально и не могут быть эхом в makeprompt. Для линейных каналов вы можете использовать 'echo -e '\ n \ n \ n foo''. Имейте в виду, что makeprompt не может выводить трейлинг-линии, поскольку '$ (..)' лишает их. –

+0

Я использовал много из них в моем приглашении (\ u, \ h, \ D и т. Д.), Но я смог заменить их всеми на переменные, поэтому теперь все отсортировано. Спасибо за вашу помощь :) – cfogelberg

0

От Баш (1)

PROMPT_COMMAND 
    If set, the value is executed as a command 
    prior to issuing each primary prompt. 

Используйте это вместо PS1. Ваше назначение PS1 разворачивается один раз, при настройке, но НЕ каждый раз, когда отображается приглашение. Да, когда он разваливается, происходит некоторое расширение, но оно ограничено (и использует переменные «замены стиля») - снова, см. Bash (1)).