我尝试使用多个输入文件测试程序(tp3)并将输出打印在另一个文件中。所以我设计了以下bash脚本名称运行器来同时执行所有操作:
#!/bin/bash
rm $2
clear
FILES=(`ls ${1}`)
cmd='./tp3'
for f in ${FILES[*]}
do
echo "$f"
echo "--------------<$f>--------------" >> $2
$cmd < $1$f 2>> $2 >> $2
done
每次运行此脚本时,都会出现以下错误:
./runner: line 10: $2: ambiguous redirect
./runner: line 11: testtest: No such file or directory
要运行bash脚本,我会这样做:
./runner test
脚本有什么问题?
使其有效的修改: 首先,我引用了变量,然后我更换了第二个参数&#34; $ 2&#34;对于名为&#34; TEST&#34;的文件现在一切正常。
新代码:
#!/bin/bash
rm TEST
clear
FILES=(`ls *.in`)
cmd='./tp3'
for f in ${FILES[*]}
do
echo "$f"
echo "--------------<"$f">--------------" >> "TEST"
"$cmd" < "$1$f" >> "TEST" 2>> "TEST"
done
感谢大家的帮助。
答案 0 :(得分:1)
您正在运行./runner test
test
为$1
且$2
为空的command arguments > output 2>&1
。你的重定向是非法的。当指向相同的输出时,也尝试耦合stdout和stderr。这可以按如下方式完成:command $1
。这会将stderr输出发送到stdout输出发送的地方。
另外,正如Wintermute指出:引用变量。变量中的空格将使其被解释为单独的参数。例如如果command
等于$1
,则some string
会向$f
提供两个参数。
这转换为以下内容:如果包含空格,则使用driver.get
它将拆分参数,空格后的所有内容将被视为额外的参数或命令,而不是单个参数。