C-程序测试人员,bash



我正在尝试测试一个带有几个输入文件的程序(TP3),并在另一个文件中打印输出。因此,我已经设计了以下Bash脚本名称Runner来同时完成所有操作:

#!/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

脚本中有什么问题?

修改使其起作用:首先,我引用了变量,然后我替换了名为" test"的文件的第二个参数" $ 2",现在一切正常。

新代码:

#!/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

感谢大家的帮助。

您正在运行./runner test,其中test$1$2是空的。您的重定向是非法的。还要在指向相同的输出时尝试对stdout和stderr进行求助。这可以如下完成:command arguments > output 2>&1。这将发送STDERR输出发送到发送stdout输出的位置。

另外,正如Wintermute所指出的:引用变量。变量中的空间将使其解释为单独的参数。例如如果$1等于some string,则command $1command提供两个参数。

这转化为以下内容:您使用 $f,如果其中包含一个空间,它将分配参数,并且在空间之后将所有内容视为额外的参数或命令,而不是一个参数。

相关内容

  • 没有找到相关文章

最新更新