2017-04-12 81 views
1

我正在從bash腳本調用perl程序。這個Perl腳本在我從命令行標記它的參數時起作用,但是當我從bash腳本調用它時會產生錯誤。

這裏是bash腳本的相關部分:

for ((i=1; i<=$z; i++)) 
do 
    if (($i%2 == 0)); then 
     ~/Desktop/SNP_finder.pl `awk 'FNR == '$i <"${d}".fasta` `awk ...` "${d}".txt 
    else 
... 

和Perl腳本:

​​

我可以運行在終端窗口SNP_finder.pl罰款,但是當我管這個猛砸腳本它給我錯誤Use of unitialized value $filename和聲稱$filename的值是''

+0

請顯示腳本中使用的整個'awk'命令。你如何從終端窗口運行命令? –

+0

我知道'awk'表示很好,因爲管道工作正常,但不添加文件名。但他們是: 'awk'FNR =='$ i <「$ {d}」。fasta'和'awk'FNR == 2'<「$ {d}」。fasta' – quantik

+0

也許這可能是值得的複製'〜/ Desktop/SNP ...'命令,除了將'perl'程序的名稱更改爲'echo'以查看'awk'命令(以及文件名擴展名)在您的腳本中變得怎樣?看起來,如果它是從命令行運行的,但不在腳本內運行,那麼腳本中的環境(某些變量未初始化或其他設置或不同的位置)會導致問題,這種情況有所不同。你知道'awk'命令在命令行中給你什麼,但是從腳本內部怎麼樣? –

回答

3

shell正在執行分詞。如果awk腳本返回空白,則參數"${d}".txt將以$ARGV[1]$ARGV[0]結尾。如果你的awk腳本返回包含空白的字符串,它最終會進一步下跌...

爲了避免這種情況,你應該說出來了,就像這樣:

"`awk ...`" 

更妙的是:

"$(awk ...)" 
+0

我知道'awk'腳本沒有返回空白,因爲它沒有將文件名作爲參數傳遞給perl腳本,它工作得很好。但我會試試這個。 – quantik

+0

沒有工作。我相信它與作爲參數而不是'awk'腳本的文本文件的傳遞有關。 – quantik