Как передать вывод команды Bash в многострочный код Perl в скрипте Bash? - PullRequest
1 голос
/ 08 февраля 2012

Для следующего конвейера в скрипте Bash:

Bash command | perl -ne 'single line perl command' | Another Bash command

Команда Perl может быть только одной строкой.Как насчет, если я хочу писать более сложные многострочные команды Perl.Могу ли я использовать несколько опций «-e» для каждой командной строки perl, например:

perl -n -e 'command line 1' -e 'command line 2' -e 'command line 3'

Или я могу использовать «Here Document» для многострочных кодов Perl (опций perl, таких как:«-n», все еще должен быть в состоянии указать в таком случае.)?

Если можно использовать «Здесь документ», кто-нибудь может проиллюстрировать, как использовать его с примером.

Заранее спасибо за любое предложение.

Ответы [ 2 ]

6 голосов
/ 08 февраля 2012

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

Bash-command |
perl -ne 'print something_here;
          do { something_else } while (0);
          generally("avoid single quotes in your Perl!");
          say q{Here is single-quoted content in Perl};
         ' |
Another-Bash-Command

Также в руководстве 'perldoc perlrun' написано:

-e commandline

может использоваться для ввода одной строки программы. Если задано -e, Perl не будет искать имя файла в списке аргументов. Для создания многострочного скрипта может быть дано несколько команд -e. Обязательно используйте точки с запятой, как в обычной программе.

-E commandline

ведет себя так же, как -e, за исключением того, что он неявно включает все дополнительные функции (в главном модуле компиляции).

Так что вы также можете сделать:

Bash-command |
perl -n -e 'print something_here;' \
        -e 'do { something_else } while (0);' \
        -e 'generally("avoid single quotes in your Perl!");' \
        -e 'say q{Here is single-quoted content in Perl};' |
Another-Bash-Command

Если скрипт становится больше, скажем, 20 строк (где-то между 10 и 50, в некоторой степени по выбору), то, вероятно, пришло время разделить скрипт Perl на его собственный файл и запустить его вместо этого.

4 голосов
/ 08 февраля 2012

Для нескольких строк Perl вам просто нужно разделить команды точкой с запятой, а не пропустить несколько вызовов -e.Например:

perl -n -e 'command line 1; command line 2;'

(хотя я бы не сказал, что блок Perl, по сути, был «командной строкой»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...