我正在制作一个带有可选标准输入的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变量。但我不想这样做,因为我将不得不对我的其余代码进行重大更改。有人知道我当前的代码是什么以及如何解决这个问题?非常感谢。
答案 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