Linux:如何评估 STDOUT 的内容?

Linux:如何评估 STDOUT 的内容?

假设你有一个包含某种终端命令的文件。每一行将如何执行?你能将 more 的输出导入到 吗eval

%> more ./foo.txt

编辑:

在得到一些评论的帮助/指导之后,我想我还应该注意到,我已经有一段时间没有做过任何 shell 脚本了,所以当我说eval我可能意味着echo或者其他执行代码的方式。

如果 foo.txt 包含多行代码,但我想执行包含 的行echo 'bar bar',我正在寻找一种方法来执行此操作,比如说grep。逻辑上类似于:

grep echo foo.txt | xargs echo

答案1

eval如果您只需要评估文件的每一行,则不需要复杂的stdout重定向。两个简单的选项:

  • 获取文件 (source filename.sh. filename.sh)。
  • 使文件可执行并运行它(chmod +x filename.sh; ./filename.sh

如果你确实需要eval循环遍历文件的每一行,while

while IFS= read -r line; do eval "$line"; done < filename.sh

您还可以将任何命令的输出通过管道传输到while

grep foo filename.sh | while IFS= read -r line; do eval "$line"; done

如果你需要将某些内容传递给source(或.),并且需要将文件名作为参数,则可以使用流程替代

source <( grep foo filename.sh )

相关内容