Bash 从测试文件中读取命令并执行
我试图编写一个shell测试程序,将我的程序的输出与示例程序进行比较。我已将命令列表存储在文本文件中,如下所示: commands.txt:Bash 从测试文件中读取命令并执行,bash,shell,Bash,Shell,我试图编写一个shell测试程序,将我的程序的输出与示例程序进行比较。我已将命令列表存储在文本文件中,如下所示: commands.txt: echo line A > a echo line A > b ./program a b shell测试如下所示: cat $testname | while read LINE do echo -e "$LINE$" $LINE done eval "$LINE" 但是,该程序不会装入文件a和b,而是生成流动的
echo line A > a
echo line A > b
./program a b
shell测试如下所示:
cat $testname | while read LINE
do
echo -e "$LINE$"
$LINE
done
eval "$LINE"
但是,该程序不会装入文件a和b,而是生成流动的:
echo line A > a
line A > a
echo line B > b
line B > b
如何像在shell文件中写入命令一样执行该命令并将输出重定向到另一个文件?shell在word展开之前处理重定向,这意味着字符串中的
在此上下文中不会被shell解释。您需要明确请求将字符串解释为完整命令,如下所示:
cat $testname | while read LINE
do
echo -e "$LINE$"
$LINE
done
eval "$LINE"
我认为唯一的方法是使用
eval
:
cat "$testname" | while read -r; do
echo "$REPLY"
eval "$REPLY"
done
如果您只运行
$LINE
,它将执行单词拆分,但不执行I/O重定向,因此它将只将
作为普通参数传递给echo
,如果您想将commands.txt文件中完全相同的行写入另一个文件,您可以说
echo "$line" >> WriteTheLines.txt
eval "$line" >> ExecuteTheCommands.txt
如果您想在commands.txt文件中执行命令,并将命令的输出写入另一个文件,您可以说
echo "$line" >> WriteTheLines.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"
#/bin/bash
input=“/home/commands.txt”
读行时
做
echo“$line”>>WriteTheCommands.txt
eval“$line”>>ExecuteTheCommands.txt
完成