получаем вывод perl-скрипта из bash-скрипта и завершаем

#perl #bash

#perl #bash

Вопрос:

Из bash-скрипта как я могу выполнить perl-скрипт, получить вывод и завершить работу, если значение равно = 0? Также в perl-скрипте, как мне вернуть значение, мне просто вернуть его или распечатать?

Ответ №1:

#!/bin/bash

аргументы perl-скрипта amp;amp; exit

Если вы хотите продолжить выполнение, возвращаемое значение должно быть в $?

Обратите внимание, что существует различие между значением, возвращаемым perl-скриптом, и выводом скрипта. Чтобы получить выходные данные скрипта, используйте оператор $():

#!/bin/bash 
вывод =$ (аргументы perl-скрипта)

повторяем, что perl-скрипт вернул $?
echo Вывод скрипта был $output

Комментарии:

1. на самом деле, если возвращаемое значение не равно 0, я хочу, чтобы оно продолжало работать

2. Я получаю: команда не найдена при добавлении amp;amp; exit в скрипт bash

3. @user391986 ‘cmd amp;amp; exit’ завершится, если cmd вернет ноль, и продолжит выполнение, если cmd вернет любое другое значение. Не уверен, почему вы получаете команду, которая не найдена.

Ответ №2:

Чтобы получить код возврата, используйте exit функцию. Пример:

Perl-скрипт:

 if ($success) {
    $return_value = 0;
} else {
    $return_value = 1;
}
exit($return_value);
  

Bash-скрипт:

 perl scriptname args > outfile amp;amp; exit
  

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

Комментарии:

1. из perl-скрипта выводить «0» или возвращать «0» также как мне получить значение perl внутри $ return_value

2. @user это Perl-скрипт. Вы возвращаете значение из скрипта с помощью exit функции. Вы можете привязать любое число, которое вам нравится $return_value , как вы обычно делаете в Perl. Я добавил еще немного к примеру perl для пояснения.

Ответ №3:

Ваш perl-скрипт: foo.pl

 #!/usr/bin/perl
# do something and then
exit 1;
  

И внутри вашего скрипта bash foo.sh:

 #!/bin/bash
# do something and then call perl script
perl foo.pl

# check return value using $?
echo "perl script returned $?"
  

Комментарии:

1. кстати, 1 не будет означать успешное возвращаемое значение и exit 1 нуждается в точке с запятой.

2. Спасибо, добавлено отсутствующее ; и правильное 1 значение определенно не означает успешное значение, это был просто пример.