Как эта команда zip используется в Perl? - PullRequest
1 голос
/ 21 ноября 2011

Я нашел этот кусок кода в Perl

system("zip $ZIP_DEBUG -r -9 itvlib.zip $include $exclude");

Однако я не понимаю, как это работает. Я имею в виду, что system () используется для запуска системных команд, верно? Так эта команда «zip» используется здесь как «системная» команда? Но я попытался запустить только следующее в командной строке;

zip $ZIP_DEBUG -r -9 itvlib.zip arg1 arg2

Это не сработало! он выдал следующую ошибку:

'zip' is not recognized as an internal or external command,
operable program or batch file.

Ну, этого не должно было случиться, поскольку команда, похоже, использует zip в качестве системной команды. Так что это делает команду 'zip' таинственной

Не могли бы вы помочь мне разобраться в этой команде со всеми ее параметрами?

Ответы [ 3 ]

6 голосов
/ 21 ноября 2011

Вероятно, это не работает, поскольку вы не заменяете такие вещи, как $ZIP_DEBUG их эквивалентными действительными значениями. В Perl они будут заменены значениями переменных перед передачей в вызов system.

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

$ perl -e '
>     $ZIP_DEBUG = "xyzzy";
>     $include = "inc_files";
>     $exclude = "exc_files";
>     print "zip $ZIP_DEBUG -r -9 itvlib.zip $include $exclude";
> '
zip xyzzy -r -9 itvlib.zip inc_files exc_files

Подробнее о том, как работает system, см. здесь . Для получения подробной информации о том, что zip должно функционировать, вы должны просто запустить:

man zip

из оболочки командной строки (при условии, что вы работаете в Linux или его братьях). Если вместо этого вы работаете в другой операционной системе (например, Windows), вам нужно будет выяснить, как получить параметры zip. Это может быть таким же простым, как zip -? из zip -h, но нет гарантии, что оно будет работать.

Если это то же самое, что Info-ZIP zip под Linux (и это может быть, если у вас есть опции -9 и -r и ваша переменная exclude начинается с -x), тогда zip -h даст вам базовую помощь и zip -h2 даст вам гораздо больше.

5 голосов
/ 21 ноября 2011
system("zip $ZIP_DEBUG -r -9 itvlib.zip $include $exclude");

выполняет программу с именем zip (вероятно, zip.exe) где-то на пути.$ZIP_DEBUG, $include и $exclude являются переменными Perl, которые интерполируются в командную строку перед выполнением команды.

Если вызов system работает в сценарии Perl, но zip -?выдает ошибку 'zip' is not recognized as an internal or external command, operable program or batch file, тогда PATH сценария Perl должен отличаться от PATH в командной строке.Или в текущем каталоге может быть команда zip, когда Perl выполняет команду system.(В Windows текущий каталог является неявным членом вашего PATH.)

Чтобы узнать, что такое PATH для сценария Perl, вы можете добавить print "$ENV{PATH}\n"; перед системной командой.Чтобы увидеть, какой PATH находится в командной строке, введите PATH.

3 голосов
/ 21 ноября 2011

Да, zip - системная команда.Переменные $ZIP_DEBUG и т. Д. Являются переменными perl, которые интерполируются в команду перед запуском zip.

Чтобы отладить фактический вызов, попробуйте добавить:

print("zip $ZIP_DEBUG -r -9 itvlib.zip $include $exclude\n");

См. perldoc для подробной информации о system.

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