程序测试员,bash

Program tester, bash

我正在尝试使用多个输入文件测试程序 (tp3) 并在另一个文件中打印输出。所以我设计了以下 bash 脚本名称 运行ner 来同时做所有事情:

#!/bin/bash
rm 
clear
FILES=(`ls `)
cmd='./tp3'
for f in ${FILES[*]}
do
    echo "$f"
    echo "--------------<$f>--------------" >> 
    $cmd < $f 2>>  >> 
done 

每次我 运行 这个脚本我都会收到以下错误:

./runner: line 10: : 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" < "$f" >> "TEST" 2>> "TEST"
done

感谢大家的帮助。

你是 运行 ./runner test 其中 test</code> 而 <code> 是空的。因此,您的重定向是非法的。当指向相同的输出时,也尝试耦合 stdout 和 stderr。这可以按如下方式完成:command arguments > output 2>&1。这会将 stderr 输出发送到发送 stdout 输出的位置。

此外,正如 Wintermute 指出的那样:引用变量。变量中的空格将使其被解释为单独的参数。例如例如,如果 </code> 等于 <code>some stringcommand 会向 command 提供两个参数。

这转化为以下内容:您使用 $f 如果它包含 space 它将拆分参数并且 space 之后的所有内容将被视为额外的参数或命令而不是不止一个参数。