使用括号中的bash命令将stdout重定向到文件

时间:2014-09-19 23:41:41

标签: bash io-redirection

我有一个从数组构建的bash命令如下:

cmd=(java -Xmx8g -jar program.jar input.vcf ">" output.vcf)

使用echo时我没有问题:

echo "${cmd[@]}"
java -Xmx8g -jar program.jar input.vcf > output.vcf

但是当我使用以下方式运行它时:

"${cmd[@]}"

>被忽略,我无法将stdout重定向到output.vcf文件。

拜托,您能给我一个解决方案吗?

2 个答案:

答案 0 :(得分:5)

将命令存储在函数中会更好。函数用于命令,变量用于数据。

cmd() {
    java -Xmx8g -jar program.jar input.vcf > output.vcf
}

cmd

(我恳请你使用eval,它允许你的基于变量的方法工作,但会打开另外一堆蠕虫。)

答案 1 :(得分:2)

我更希望John Kugelman's answer但是如果真的意味着执行存储在数组中的字词,那么你可以eval

cmd=(date '>' date.stdout)
eval "${cmd[@]}"

请注意,这可能会打开各种安全漏洞。