就像标签上说的,这是在Cygwin。
我有一个命令行程序,可以从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

这里发生了什么事?我不确定我做错了什么。

最佳答案

删除第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的文章。

09-26 14:34