2012-09-10 107 views
0

我試圖創建一個bash腳本來構建一個命令來執行(包括參數)。命令可執行文件的名稱是ms(它位於ms目錄中),它需要一堆參數,我計算並存儲在一個字符串中。當談到時間來執行命令,我嘗試:命令參數被解釋爲命令文件名

GENETREES=$(../ms/${x:1}) 

,但我得到的錯誤信息:

./simulate.sh: line 21: ../ms/ms 6 1 -T -I 6 1 1 1 1 1 1 -ej 0.059851352500000010170566611122922040522098541259765625 1 4 -es 0.059851352500000010170566611122922040522098541259765625 4 0.3457841801761454281205487859551794826984405517578125 -ej 0.059851352500000010170566611122922040522098541259765625 2 3 -es 0.059851352500000010170566611122922040522098541259765625 3 0.54870128110803395582451003065216355025768280029296875 -ej 0.0897770262499999471828004971030168235301971435546875 7 9 -es 0.089777026250000002693951728360843844711780548095703125 3 0.8097582153199012200417428175569511950016021728515625 -ej 0.119702699999999995217336845598765648901462554931640625 3 4 -ej 0.125827642499999947656164067666395567357540130615234375 9 10 -es 0.1258276425000000031673152989242225885391235351562500 4 0.28069295861466903030390085405088029801845550537109375 -ej 0.13195258499999995560614252099185250699520111083984375 8 10 -ej 0.1817980399999999663318561715641408227384090423583984375 6 5 -ej 0.2525933399999999717788767839010688476264476776123046875 10 4 -ej 0.41145434999999996872332985731191001832485198974609375 4 5 : File name too long 

我想慶典認爲我打算所有這些命令參數要的一部分可執行名稱。但這不是我的意圖。

我在做什麼錯?

謝謝。

更新 - 要求對X是如何構建

MSOUT=$(java -jar ./NetworkSearchGen.jar ms $3 $TRUENETWORK $4) 
OIFS=$IFS 
IFS='}' 
first="true" 
for x in $MSOUT 
do 
    if [ $first = "true" ]; then 
      echo "$x" 
    else 
     GENETREES=$(../ms/${x:1}) 
    fi 
    first="false" 
done 
+1

你能展示你如何填充'$ x'? – choroba

+0

它主要來自java命令的輸出。我將編輯更新並顯示更多內容。 – Dejas

回答

1

有人設置,擰東西了IFS更多信息。在執行之前讓IFS =「」讓腳本重新運行。

+0

通常,您可以在子shell中執行需要IFS修改的工作。 '(IFS ='}';一些代碼)'。 '()'使代碼運行一個子shell – jordanm