нужна помощь в том, как избежать этой команды perl

я пытался выполнить эту команду в perl, она отлично работала из bash. Но при выполнении из perl это не работает. Может быть, я не избегал нужных символов? Не могли бы вы помочь.

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`;

Вот ошибка, которую он выдает мне при запуске скрипта:

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 источник


Ответы (1)


Он отлично работал при выполнении с использованием bash, потому что это допустимая команда bash.

Это не сработало при выполнении с помощью Perl sh, потому что это недопустимая команда sh.

Если вы хотите выполнить команду bash, вам действительно нужно выполнить bash.

my $result = `bash -c bash_commmand_here`;

Давайте исправим некоторые проблемы с интерполяцией, пока мы это делаем.

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