2013-08-28 134 views
1

就像標籤所說,這是在Cygwin中。命令在命令行中工作,但在bash腳本中給出'沒有這樣的文件或目錄'

我有,我可以從Cygwin的控制檯運行一個命令行程序:

./optAlg.exe data/5Node/1.dat 500 2>&1 > output/1.out 

我寫了下面的bash腳本把它放在一個循環

#!/bin/bash 

for inputFile in data/5Node/*.dat 
do 
    outputFile=${inputFile##*/} #strip output name from input name 
    outputFile=${outputFile%.*} #strip output name input file 
    outputFile+=".out" 
    "./optAlg.exe $inputFile 500 2>&1 > output/$outputFile" 
done 

當我運行的bash腳本,for循環的每一次迭代我得到'沒有這樣的文件或目錄',例如,

./batchOpt.sh: line 8: ./optAlg.exe data/5Node/1.dat 500 2>&1 > output/1.out: No such file or directory 

什麼在這裏發生?我不確定我做錯了什麼。

+0

問題的答案是?是?請接受並回答。 – ySiggen

回答

4

刪除線周圍8
引號像這樣:

./optAlg.exe "$inputFile" 500 2>&1 > "output/$outputFile" 

通過放置引號整行,你告訴bash執行一個被稱爲命令正好./optAlg.exe $inputFile 500 2>&1 > output/$outputFile當然沒有這樣的命令。實際上你想用參數運行./optAlg.exe。不要忘記在變量周圍放置引號,否則具有空格字符的文件名將作爲多個參數傳遞。
read about arguments
你也可以閱讀約common pitfalls

相關問題