Выполнить команду Windows с пробелами в Perl - PullRequest
0 голосов
/ 27 августа 2018

Мой Firefox установлен в C: \ Program Files \ Mozilla Firefox .

Я пытаюсь прочитать версию firefox , например:

open (IN, "\"C:\\Program\ Files\\Mozilla\ Firefox\\firefox.exe\" --version|") or die "Couldn't fork - $!\n";   
my $aarray = (IN); 
print $fh "=========Array Content========> $aarray <====\n";

close(IN);

Это работает отлично. Но когда я помещаю путь или команду в переменную и пытаюсь ее выполнить, произойдет сбой, сказав «Не удалось разветвить»

my $ffox = 'C:\Program Files\Mozilla Firefox\firefox.exe';

$ffox =~ s/\\/\\\\/g;  #Replacing single \ with double \\

$ffox =~ s/\ /\\ /g;   # Adding escape character before space 
chop($firefoxVer);  # remove last \n chr.

$ffox =~ s/$/\\\"/g; # With the below two commands, massaging the command to become

$ffox =~ s/^/\\\"/g; # "C:\\Program\ Files\\Mozilla\Firefox\\firefox.exe\"

$firefoxVer = $ffox.' --version|';  # Adding "version|" to the above command  
$firefoxVer =~ s/$/\"/g;     # and make it look like:

$firefoxVer =~ s/^/\"/g;   # "\"C:\\Program\ Files\\Mozilla\\Firefox\\firefox.exe\" --version|"

open (IN, $firefoxVer) or die "Couldn't fork - $!\n"; ==> Fails

1 Ответ

0 голосов
/ 28 августа 2018

С помощью галочек вы можете получить результат напрямую, без open.Процитируйте вещи командной строки, которые должны сохранить свои пробелы:

use v5.10;
my $version = `"C:\\Program Files\\Mozilla Firefox\\firefox.exe" -version`;
say "version is $version";

Если этот каталог находится на вашем пути, вам не нужно дурачиться с этим:

my $firefox = 'C:\\Program Files\\Mozilla Firefox';
$ENV{PATH} .= ";$firefox";
my $version = `firefox -version`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...