Bash 如何逃离<&书信电报;()perl中的习惯用法
我有一个试图执行的系统命令,但它给了我错误“语法错误:意外重定向” 正在尝试命令:Bash 如何逃离<&书信电报;()perl中的习惯用法,bash,perl,backticks,Bash,Perl,Backticks,我有一个试图执行的系统命令,但它给了我错误“语法错误:意外重定向” 正在尝试命令: datamash -ft, -g 1 mean 3 mean 4 < <(tail -n +2 yourfile | sort -t, -k1,2) | cut -d, -f1,2,5,6 datamash-ft,-g1平均值3平均值4
datamash -ft, -g 1 mean 3 mean 4 < <(tail -n +2 yourfile | sort -t, -k1,2) | cut -d, -f1,2,5,6
datamash-ft,-g1平均值3平均值4<
`datamash-ft,-g1表示3表示4\readpipe
期望将命令传递给sh
(或Windows中的cmd
)。
您似乎有一个bash
命令,而不是sh
命令。固定的:
`bash -c 'datamash -ft, -g 1 mean 3 mean 4 < <(tail -n +2 yourfile | sort -t, -k1,2) | cut -d, -f1,2,5,6'`
这并不能帮助我们避免在第二个代码段中使用shell\u quote
,但它确实减少了以下内容:
`tail -n +2 yourfile | sort -t, -k1,2 | datamash -ft, -g 1 mean 3 mean 4 | cut -d, -f1,2,5,6'`
use String::ShellQuote ( shell_quote );
my $qfn = '...';
my $tail_cmd = shell_quote('tail', '-n', '+2', $qfn);
my $sh_cmd = "$tail_cmd | sort -t, -k1,2 | datamash -ft, -g 1 mean 3 mean 4 | cut -d, -f1,2,5,6";
`$sh_cmd`
BackPipereadpipe
需要将命令传递给sh
(或Windows中的cmd
)。
您似乎有一个bash
命令,而不是sh
命令。固定的:
`bash -c 'datamash -ft, -g 1 mean 3 mean 4 < <(tail -n +2 yourfile | sort -t, -k1,2) | cut -d, -f1,2,5,6'`
这并不能帮助我们避免在第二个代码段中使用shell\u quote
,但它确实减少了以下内容:
`tail -n +2 yourfile | sort -t, -k1,2 | datamash -ft, -g 1 mean 3 mean 4 | cut -d, -f1,2,5,6'`
use String::ShellQuote ( shell_quote );
my $qfn = '...';
my $tail_cmd = shell_quote('tail', '-n', '+2', $qfn);
my $sh_cmd = "$tail_cmd | sort -t, -k1,2 | datamash -ft, -g 1 mean 3 mean 4 | cut -d, -f1,2,5,6";
`$sh_cmd`
我甚至不会在这里使用进程替换。只需使用普通管道:
`tail -n +2 yourfile | sort -t, -k1,2 | datamash -ft, -g 1 mean 3 mean | cut -d, -f1,2,5,6`
当命令(如datamash
)需要在当前shell中运行时,或者当您希望将一个命令的输出提供给另一个只从命名文件而不是其标准输入读取的命令时,进程替换最为有用。这两种情况在这里都不适用。我甚至不会在这里麻烦使用流程替换。只需使用普通管道:
`tail -n +2 yourfile | sort -t, -k1,2 | datamash -ft, -g 1 mean 3 mean | cut -d, -f1,2,5,6`
当命令(如datamash
)需要在当前shell中运行时,或者当您希望将一个命令的输出提供给另一个只从命名文件而不是其标准输入读取的命令时,进程替换最为有用。这两种情况在这里都不适用。双引号字符串文本(包括反勾号)中只有四个特殊字符:\
,$
,@
和分隔符。双引号字符串文本(包括反勾号)中只有四个特殊字符:\
,$
,@
和分隔符。