1

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

脚本有什么问题?

使其工作的修改:首先我引用了变量,然后我为名为“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

感谢大家的帮助。

4

1 回答 1

1

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

此外,正如 Wintermute 指出的那样:引用变量。变量中的空格将使其被解释为单独的参数。例如,例如为if equalscommand $1提供两个参数。command$1some string

这转化为以下内容:$f如果 this 包含一个空格,它将拆分参数,并且空格之后的所有内容都将被视为额外的参数或命令,而不是一个单独的参数。

于 2015-05-09T23:50:41.427 回答