2015-02-27 14 views
9

Dlaczego ktoś chciałby mieć kod taki jak echo "something" || true?Jaki jest pożytek z "echo || true"?

I znaleziono takiego wykorzystania na linii 92 /lib/lsb/init-functions na Ubuntu 14.04:

echo "$pid" || true

I zrozumieć, że || oznacza OR. Ale nie mogłem znaleźć sposobu, by wywołać echo dowolnego kodu wyjścia innego niż zero. A nawet jeśli tak, to kogo to obchodzi?

To znaczy, użycie przedrostka zapewnia, że ​​kod wyjścia jest zawsze równy 0. Tak więc jeśli po lewej stronie podwójnej rury powstanie coś innego niż 0, true zostanie wykonane i spowoduje, że cała linia da 0.

Dlaczego paranoja z kodem wyjścia prostego echa? Czy jest coś, co sprawdza, czy każda linia na /lib/lsb/init-functions kończy się sukcesem?

+2

Osobiście, nawiasem mówiąc, staram się napisać to jako '||:'; nieco krótszy/gorszy/mniej wizualnie rozpraszający uwagę. –

Odpowiedz

2

Dlaczego paranoja z kodem wyjścia

Uważam, że aby uniknąć scenariusza wychodzenia ze względu na możliwość wykorzystania:

set -e 

na początku skryptu, który by spowodował skrypt aby zakończyć w inny sposób.

+0

Nawet to wymaga 'echo', aby zwrócić błąd, którego nie jestem pewien, czy naprawdę może to zrobić, ale tak, to (lub nadpisanie reguły) wydaje się być dwoma najbardziej prawdopodobnymi" powodami ". –

+0

Prawda, nie mogę wymyślić przyczyny, dla której "echo" zakończy się niepowodzeniem, ale jest to || true' wydaje się być potencjalnym zapobieganiem "wyjściu". – anubhava

+5

'echo' może się nie powieść, jeśli na standardowym wyjściu wystąpił błąd wejścia/wyjścia, na przykład jeśli został przekierowany do pliku w nieistniejącym katalogu lub do'/dev/full'. –

Powiązane problemy