Чи є стандартна команда, яка завжди виходить із збоєм?


42

Я хочу перевірити свій скрипт за допомогою команди, яка виходить з ладу. Я міг би використовувати існуючу команду з поганими аргументами. Я також міг написати простий сценарій, який негайно закінчується з відмовою. І те й інше легко зробити і працювати для мене, але якщо для цієї мети є стандартна команда, я хотів би використати це.


false, але також будь-яка неіснуюча команда.
Kusalananda

Відповіді:


51

Ви можете використовувати false( /bin/false, /usr/bin/falseабо оболонку вбудований):

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

Ви також можете скористатися exit 1з допоміжної оболонки:

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

Крім того, ви можете портативно зателефонувати на вихід із будь-яким номером у діапазоні 1-255, включно. (Більшість оболонок застосовуватимуть операцію модуля 255 на будь-які інші номери, задані для виходу, тому на практиці ви можете піти з іншими номерами, хоча вони просто примушені до вищезгаданого діапазону. Але деякі оболонки будуть робити інші речі, наприклад вийти з помилка синтаксису (все-таки статус відмови), якщо викликається з негативним значенням. Unix-подібні системи підтримують лише вихідні коди в межах 0-255 включно, тому ви не можете розраховувати на чітко визначену поведінку для інших заданих значень для виходу у всіх снарядах.)
mtraceur

1
І як дрібниця, якщо вам не потрібна переносимість справді старих / неясних оболонок, ви також можете виконати ! :(або будь-яку іншу команду, яка зазвичай повертає успіх). !говорить про заперечення стану виходу команди, що випливає. :це просто команда вбудованого noop, яка завжди завершується з успіхом. (Переконайтеся, що залиште пробіл після !відміни команди та перед тим, як команда буде відмовлена, інакше вона спробує розібрати її як одну команду, що починається з !символу - або у випадку оболонок, як bashв інтерактивному режимі, вона аналізує її як одну з ті спеціальні модифікатори історії.)
mtraceur
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.