我有一个从数组构建的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
文件。
拜托,您能给我一个解决方案吗?
答案 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[@]}"
请注意,这可能会打开各种安全漏洞。