2016-03-21 5 views
2

Я хотел бы вернуть код выхода «0» из неудавшейся команды. Есть ли более простой способ сделать это, а не:Как вернуть код выхода 0 из неудавшейся команды

function a() { 
    ls aaaaa 2>&1; 
} 

if ! $(a); then 
    return 0 
else 
    return 5 
fi 
+0

Как насчет 'возвращения! a' – user000001

+0

Нет необходимости в подстановке команд, простое использование 'if! а; то ... ' – andlrc

+0

, если вывод' stderr' записывается в 'stdout', в случае сбоев команды скрипт выдает неприятную ошибку, которую можно избежать, отключив вывод команды и получив только статус выполнения команды из '$?' – Inian

ответ

3

Просто добавьте return 0 к функции, чтобы заставить функцию всегда выйти успешным.

function a() { 
    ls aaaaa 2>&1 
    return 0 
} 

a 
echo $? # prints 0 

Если вы хотите сделать это рядным по любой причине можно добавить запись || true к команде:

ls aaaaa 2>&1 || true 
echo $? # prints 0 

Если вы хотите, чтобы инвертировать статус выхода простую PREPEND команды с !

! ls aaaaa 2>&1 
echo $? # prints 0 

! ls /etc/resolv.conf 2>&1 
echo $? # prints 1 

Также, если вы заявляете, чего вы пытаетесь достичь в целом, мы можем помочь вам лучше ответить.

+0

Если файл отсутствует, 'ls /etc/resolv.conf 2> & 1' будет вызывать уродливую ошибку в консоли :) – Inian

+0

Это будет , Вывод может быть полностью подавлен заменой '2> & 1' на' &>/dev/null' или stderr только может быть подавлен путем замены его на '2>/dev/null'. –

Смежные вопросы