如果我在bash(debian 10)中执行以下命令:
comm -1 -3 <(sort $file1) <(sort $file2) > $output_file
我得到了预期的结果。但如果我在perl脚本中尝试这样做:
`comm -1 -3 <(sort $file1) <(sort $file2) > $output_file`;
我得到了以下:
sh: 1: Syntax error: "(" unexpected
我怎样才能让它在perl中工作呢?
ocebsuys1#
回勾使用/bin/sh(或cmd),而不是bash,因此需要构造一个POSIX shell命令,当然,该命令可以调用bash。以下代码实现了这一点,同时还修复了code injection错误:
/bin/sh
cmd
bash
use String::ShellQuote qw( shell_quote ); my $sort_cmd1 = shell_quote( "sort", "--", $file1 ) . ' 2>&1'; my $sort_cmd2 = shell_quote( "sort", "--", $file2 ) . ' 2>&1'; my $bash_cmd = shell_quote( "comm", "-1", "-3" ) . " <( $sort_cmd1 ) <( $sort_cmd2 )"; my $sh_cmd = shell_quote( "bash", "-c", $bash_cmd ); my $output = `$sh_cmd`;
或
use String::ShellQuote qw( shell_quote ); my $bash_cmd = 'comm -1 -3 <( sort -- "$1" 2>&1 ) <( sort -- "$2" 2>&1 )'; my $sh_cmd = shell_quote( "bash", "-c", $bash_cmd, "dummy", $file1, $file2 ); my $output = `$sh_cmd`;
1条答案
按热度按时间ocebsuys1#
回勾使用
/bin/sh
(或cmd
),而不是bash
,因此需要构造一个POSIX shell命令,当然,该命令可以调用bash
。以下代码实现了这一点,同时还修复了code injection错误:
或