Отправка команд на терминал из скрипта - PullRequest
1 голос
/ 29 ноября 2011

Как вы отправляете команды на терминал в сценарии perl?

Например, если я хочу выполнить команду mkdir $directory в консоли, что мне ввести в сценарии perl?

Ответы [ 4 ]

5 голосов
/ 11 декабря 2012

Для выполнения любой системной команды из Perl-скрипта вам необходимо использовать системную команду с обратным ключом

Например,

В вашем случае для создания каталога вам нужно набрать

система (mkdir $directory); #note html не показывает обратный трюк, но обратный тик помещается перед mkdir и после $ directory

Это создаст каталог в текущем рабочем каталоге на имя $ directory

4 голосов
/ 29 ноября 2011

Поскольку в Perl встроен системный вызов mkdir(), вам вообще не нужно использовать команду system:

my $directory = "...";
if (mkdir $directory)
{
    croak "Failed to create directory $directory ($!)";
}

Если вы должны использовать system, сделайте этобезопасный способ:

if (system "mkdir", $directory)
{
    croak "Failed to create directory $directory";
}

Эта форма оператора system (со списком аргументов) позволяет избежать проблем расширения оболочки.

4 голосов
/ 29 ноября 2011

Моделирование примера кода в документации по http://perldoc.perl.org/functions/system.html:

@args = ("mkdir", $directory);
system(@args) == 0
    or die "mkdir failed";

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

0 голосов
/ 29 ноября 2011

Используйте команды perl вместо использования команд оболочки. Perl может многое сделать, и если он еще не встроен или основной модуль , он, вероятно, доступен на CPAN .

Как уже упоминалось, доступно mkdir, как и большинство базовых команд, связанных с файлами .

Как уже говорилось, вот грязь на командах оболочки в perl:

Вы хотите, чтобы скрипт на Perl:

  • Подождите, пока будет выполнена команда оболочки, и проверьте ее состояние выхода. Используйте system
  • Подождите и сохраните стандартный вывод команды оболочки. Используйте qx// или обратные кавычки.
  • Отменить сценарий perl для запуска другой команды. использование exec. Но обычно вы не хотите использовать exec для причины, описанные в ссылке выше.
  • Запустить системную команду и канал ввода или вывода в / из нее. использование open с РЕЖИМОМ либо -| или |-, соответственно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...