Назад | Перейти на главную страницу

Perl эквивалент sh -e

В /bin/sh и /bin/bash (и я предполагаю, что многие другие оболочки), начиная сценарии с #!/bin/sh -e (или выполнение set -e где-нибудь в сценарии) приведет к прерыванию сценария, когда любая командная строка внутри сценария завершится с кодом состояния, отличным от 0.

Есть ли какой-либо эквивалент или обходной путь для получения такого же поведения в сценарии Perl? (т.е. если какая-либо инструкция вызывает ошибку или если какая-либо внешняя команда выполняется с system(...) или обратные кавычки возвращают код ошибки, затем немедленно выйдите)

Посмотрите на автодай основной модуль. Это заменяет такие звонки, как open и fork с функциями, которые умирают при сбое. Чтобы заставить его работать с system, вам нужно импортировать :all или :system, поскольку по умолчанию этого не происходит.

use strict;   #always!
use warnings; #always!
use autodie qw(:system);

system('/bin/false'); #This will die
print "This will never be printed\n";

Важно отметить, что для autodie работать с systemвам нужен IPC::System::Simple модуль. Установите его с помощью CPAN или на Ubuntu вы можете sudo apt-get install libipc-system-simple-perl.