Czy istnieje standardowe polecenie, które zawsze kończy się niepowodzeniem?


42

Chcę przetestować skrypt za pomocą polecenia, które się nie powiedzie. Mógłbym użyć istniejącego polecenia ze złymi argumentami. Mógłbym również napisać prosty skrypt, który natychmiast kończy działanie z błędem. Oba są łatwe do zrobienia i działają dla mnie, ale jeśli istnieje standardowe polecenie do tego celu, chciałbym go użyć zamiast tego.


false, ale także wszelkie nieistniejące polecenia.
Kusalananda

Odpowiedzi:


51

Można użyć false( /bin/false, /usr/bin/falselub powłoka wbudowane):

$ false || echo It failed.
It failed.
$

Możesz także użyć exit 1z podpowłoki:

$ (exit 1) || echo Gosh, it failed too.
Gosh, it failed too.
$

Ponadto możesz przenośnie wywołać wyjście z dowolnym numerem z zakresu 1-255 włącznie. (Większość pocisków zastosuje operację modulo 255 na dowolnych innych liczbach podanych do wyjścia, więc w praktyce możesz uciec od innych liczb, chociaż są one po prostu zmuszone do wyżej wspomnianego zakresu. Ale niektóre pociski zrobią inne rzeczy, na przykład wyjdź za pomocą błąd składniowy (choć nadal jest to stan błędu), jeśli zostanie wywołany z wartością ujemną. Systemy uniksowe obsługują tylko kody wyjścia z zakresu 0-255 włącznie, dlatego nie można polegać na dobrze zdefiniowanym zachowaniu dla innych podanych wartości wyjść ze wszystkich muszli.)
mtraceur

1
I trochę ciekawostek, chyba że potrzebujesz przenośności do naprawdę starych / niejasnych powłok, możesz także zrobić ! :(lub dowolne inne polecenie, które zwykle zwraca sukces). !mówi, aby zanegować status wyjścia następującego polecenia. :to tylko wbudowane polecenie noop, które zawsze kończy się powodzeniem. (Po prostu pamiętaj, aby pozostawić spację po !zanegowaniu polecenia i przed nim, w przeciwnym razie spróbuje go parsować jako jedno polecenie zaczynające się od !znaku - lub w przypadku powłok jak bashw trybie interaktywnym analizuje je jako jedno z te specjalne modyfikatory historii.)
mtraceur
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.