2013-06-20 5 views
6

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

Я хочу, чтобы вывести состояние выхода на моей строке со следующим кодом:

function status() { 
    echo $? 
} 

export PS1="\$(status)>" 

Когда я запускаю это, я получаю следующие выходные данные

0❯ pwd 
/Users/tringuyen 
0❯ ad 
bash: ad: command not found 
0❯ echo $? 
127 

ясно вторая последняя команда ad Didn 't возвращает код состояния 0. Однако это то, что я получил от подсказки.

Кто-нибудь знает, что может быть здесь?

EDIT 6/20 11:57 утра: Проблема, кажется, что $? не всегда 0 ни на что, кроме произошла ошибка в самой .bashrc файл, который заставит его вернуть значение, отличное от 0.

+0

$ (status) выполняет команду в подоболочке - дочерний процесс. Пропустить $? в качестве параметра: $ (статус $?), а затем: echo $ 1 в вашей статусной функции. –

+3

Код, написанный, как представляется, отлично работает для меня. Моя '$ BASH_VERSION' -' 4.2.20 (1) -release'. – IMSoP

+3

Это нормально для меня, достаточно сделать это 'PS1 =" \ $?> "' –

ответ

1

Выполняет ли следующее с вашей версией bash следующее:

export PS1="\$?>" 
1

Я также имел подобную проблему, но моя функция выглядела иначе. Проблема была в том, что мне не хватало точки с запятой ";" после VAR = $?

OLD:

function status() { 
    VAR=$? 
    echo $VAR 
} 

Всегда возвращали ноль ни на что.

NEW:

function status() { 
    VAR=$?; 
    echo VAR; 
} 

Теперь вернулся правильное возвращаемое значение.

export PS1="\$(status)>"