具有特殊性质的问题'<'在Bash字符串?

时间:2017-09-22 16:27:41

标签: linux bash shell unix input

我正在制作一个带有可选标准输入的shell脚本。我有一段代码如下。 $ {file}只是一个fileName,它写在包含所有文件名列表的txt文件中。在这种情况下$ 2将是另一个程序(也是一个shell脚本)。

        if [ -f ${file}.in ]; then #if ${file}.in exists in current directory

                stdIn="< ${file}.in" #set optional stdIn

        fi
        if ! [ -f ${file}.args ]; then #if ${file}.args does not exist in curr directory

                $2 $stdIn > ${file}.out #run the $2 program with the optional standard input and redirect the output to a .out file

出于某种原因,&#39;&lt;&#;字符未正确解释。如果我将行更改为

,这可以正常工作
$2 < $stdIn > ${file}.out

并删除了&#39;&lt;&#39;来自stdIn变量。但我不想这样做,因为我将不得不对我的其余代码进行重大更改。有人知道我当前的代码是什么以及如何解决这个问题?非常感谢。

1 个答案:

答案 0 :(得分:2)

您无法将<运算符存储在变量中。相反,正确的做法是无条件地重定向存储在stdIn中的文件名的输入,并将其初始化为/dev/stdin,这样如果没有其他输入文件是合适的,您只需从标准输入读取。

stdIn=/dev/stdin

if [ -f "${file}.in" ]; then
    stdIn="${file}.in" #set optional stdIn
fi
if ! [ -f "${file}.args" ]; then
    "$2" < "$stdIn" > "${file}.out"
fi