Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从测试文件中读取命令并执行_Bash_Shell - Fatal编程技术网

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

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,而是生成流动的

我试图编写一个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
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
完成