Linux:如何评估 STDOUT 的内容?

vol*_*ron 4 linux bash sh tcsh

假设您有一个带有某种终端命令的文件。每行如何执行?你能把 more 的输出传送到一个eval?

%> more ./foo.txt
Run Code Online (Sandbox Code Playgroud)

编辑:

在从评论中获得一些帮助/指导之后,我想我还应该注意,我已经有一段时间没有完成任何 shell 脚本了,所以虽然我说eval我可能是指echo或其他一些执行代码的方式。

如果 foo.txt 包含多行代码,但我想执行包含 的行echo 'bar bar',我正在寻找一种方法来做到这一点,假设一个grep. 逻辑上类似于:

grep echo foo.txt | xargs echo
Run Code Online (Sandbox Code Playgroud)

slh*_*hck 5

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

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

如果您真的需要eval循环中文件的每一行,请执行以下操作while

while IFS= read -r line; do eval "$line"; done < filename.sh
Run Code Online (Sandbox Code Playgroud)

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

grep foo filename.sh | while IFS= read -r line; do eval "$line"; done
Run Code Online (Sandbox Code Playgroud)

如果您需要将某些内容传递给source(or .),它需要一个文件名作为参数,您可以使用进程替换

source <( grep foo filename.sh )
Run Code Online (Sandbox Code Playgroud)

  • 从技术上讲,`source` 是`.` 的非标准同义词。 (2认同)