从测试文件中读取命令并执行

时间:2018-10-03 08:15:36

标签: bash shell

我正在尝试编写一个shell测试程序,将该程序的输出与示例程序进行比较。我已经在文本文件中存储了命令列表,它看起来像这样: 命令。txt:

echo line A > a
echo line A > b    
./program a b

和外壳测试如下:

cat $testname | while read LINE
do  
   echo -e "$LINE$"
   $LINE
done

但程序不会创建文件a和b,而是产生以下内容:

echo line A > a
line A > a
echo line B > b
line B > b

我如何执行命令,就像将其写在shell文件中一样,然后将输出重定向到另一个文件?

3 个答案:

答案 0 :(得分:2)

我认为唯一的方法是使用eval

cat "$testname" | while read -r; do  
   echo "$REPLY"
   eval "$REPLY"
done

如果仅运行$LINE,它将执行分词,但不会执行I / O重定向,因此它将>作为常规参数传递给echo

答案 1 :(得分:1)

shell在单词扩展之前处理重定向,这意味着在这种情况下shell不会解释字符串中的>。您需要明确要求将字符串解释为完整命令,如下所示:

eval "$LINE"

答案 2 :(得分:1)

如果您想将commands.txt文件中完全相同的行写到另一个文件中,可以说;

echo "$line" >> WriteTheLines.txt

如果您想执行commands.txt文件内部的命令,并将命令的输出写入另一个文件,您可以说;

eval "$line" >> ExecuteTheCommands.txt

举个例子;

#!/bin/bash

input="/home/commands.txt"

while read line
do
echo "$line" >> WriteTheCommands.txt
eval "$line" >> ExecuteTheCommands.txt

done<"$input"