程序测试员,bash

时间:2015-05-09 23:35:53

标签: c bash ambiguous runner

我尝试使用多个输入文件测试程序(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

感谢大家的帮助。

1 个答案:

答案 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它将拆分参数,空格后的所有内容将被视为额外的参数或命令,而不是单个参数。