Прежде всего, Windows не использует строку Шебанга, поэтому я не уверен, зачем вы вообще делаете эту работу.
Perl прочтет линии shebang и ищите опции, если в пути найден perl
, даже на Windows, но это означает, что #!perl
достаточно, если вы хотите передать опции через линию shebang (например, #!perl -n
).
Теперь, возможно, вы используете Cygwin, MSYS или какую-либо другую unix эмуляцию вместо Windows для запуска программы, но вы помещаете путь Windows в строку shebang (C:...
), а не чем путь unix, так что это тоже не имеет смысла.
Есть три дополнительных проблемы с попыткой:
cmd
использует двойные кавычки для цитирования. cmd
не выполняет расширение по шаблону, как sh
, поэтому ваша программа должна это сделать. - Вы пытаетесь сгенерировать Perl код из
cmd
. ой.
Если мы go впереди, мы получим:
"%TRAINING%software\perl\bin\perl" -MFile::DosGlob=glob -pe"BEGIN { @ARGV = map glob, @ARGV; $base = $ENV{TRAINING} =~ s{\\}{/}rg } s/_BASE_/$base/g" -i.bak -- %TRAINING%work\*.pl
Если мы добавим разрывы строк для удобства чтения, мы получим следующее (что cmd
не будет принять):
"%TRAINING%software\perl\bin\perl"
-MFile::DosGlob=glob
-pe"
BEGIN {
@ARGV = map glob, @ARGV;
$base = $ENV{TRAINING} =~ s{\\}{/}rg
}
s/_BASE_/$base/g
"
-i.bak -- %TRAINING%work\*.pl