2014-09-19 43 views
1

我從陣列建立bash命令標準輸出到文件中使用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文件。

請問,你能給我一個解決方案嗎?

+1

當你通過它的方式,'''不*忽略*;相反,它作爲參數傳遞給Java程序。 – 2014-09-19 23:47:48

+0

這是一個(安全性和正確性)功能,而不是一個錯誤 - 它意味着數據(如參數)不能被視爲代碼而不會有意的相反行爲。 – 2014-09-19 23:48:20

+0

您可以使用'eval「$ {cmd [@]}''。 – ooga 2014-09-19 23:49:06

回答

5

將命令存儲在函數中會更好。函數用於命令,變量用於數據。

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

cmd 

(我懇求你使用eval,它允許您基於變量的方法來工作,但開闢了蠕蟲的一個整體的其他罐頭。)

2

我寧願John Kugelman's answer但如果你真的是執行存儲在陣列中的話,你可以eval他們:

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

被警告,這可能打開各種安全漏洞。