potrzebujesz pomocy, jak uciec od tego polecenia perla

próbowałem wykonać to polecenie w perlu, działało dobrze z bash. Ale przy uruchamianiu z perla to nie działa. Może nie uciekłem właściwym postaciom? Czy mógłbyś mi pomóc.

my $comp_command = "./jnx_comp.py <(/usr/bin/ssh $boss\@$ftpServer[$j] '/bin/cat $compList[0]') <(/usr/bin/ssh $boss\@$ftpServer[$j] '/bin/cat $compList[1]')"

my $result = `$comp_command`;

Oto błąd, który daje mi podczas uruchamiania skryptu:

sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `./jnx_comp.py <(/usr/bin/ssh jnxapps@dcsftp01n '/bin/cat /home/A11256/out/recon/JNX_EOD_20130606.csv'

person Community    schedule 09.06.2013    source źródło


Odpowiedzi (1)


Działało dobrze, gdy zostało wykonane przy użyciu bash, ponieważ jest to prawidłowe polecenie bash.

Nie zadziałało, gdy zostało wykonane przy użyciu Perla sh, ponieważ nie jest to poprawne polecenie sh.

Jeśli chcesz wykonać polecenie bash, musisz faktycznie wykonać bash.

my $result = `bash -c bash_commmand_here`;

Naprawmy kilka problemów z interpolacją, gdy już przy tym jesteśmy.

use String::ShellQuote qw( shell_quote );

my $remote_cmd1 = shell_quote('/bin/cat', $compList[0]);
my $remote_cmd2 = shell_quote('/bin/cat', $compList[1]);

my $ssh_cmd1 = shell_quote('/usr/bin/ssh', "$boss\@$ftpServer[$j]", $remote_cmd1);
my $ssh_cmd2 = shell_quote('/usr/bin/ssh', "$boss\@$ftpServer[$j]", $remote_cmd2);

my $bash_cmd = "./jnx_comp <( $ssh_cmd1 ) <( $ssh_cmd2 )";

my $sh_cmd = shell_quote('bash', '-c', $bash_cmd);

`$sh_cmd`
person ikegami    schedule 09.06.2013