如何执行来自grep结果的行?

719*_*016 11 grep bash

我有一个包含某些安装说明的文本文件,我知道我可以 grep 查找文件中的唯一出现。例如,文本文件具有以下内容:

MYDIR=`find /home/user -name somedir`
导出 PERL5LIB=$PERL5LIB:$MYDIR

在 bash 中,如何在文件中的 grep 之后执行行?就像是:

执行“grep somedir INSTALLFILE”的结果
执行“grep 'export PERL5LIB' INSTALLFILE”的结果

Gil*_*il' 13

要在单独的 shell 进程中评估行:

grep somedir INSTALLFILE | sh
Run Code Online (Sandbox Code Playgroud)

要评估正在运行的 shell 进程中的行:

eval "$(grep somedir INSTALLFILE)"
Run Code Online (Sandbox Code Playgroud)


gle*_*man 4

假设:

  • 您可以控制该文件并且不会面临恶意代码的危险
  • 你想将这些变量设置为你当前的 shell

您可以将命令重定向到临时文件并执行:

tmp=$(mktemp)
{
    grep somedir INSTALLFILE
    grep 'export PERL5LIB' INSTALLFILE
} > "$tmp"
. "$tmp"
Run Code Online (Sandbox Code Playgroud)

或者你可以评估结果

eval "$(grep somedir INSTALLFILE)"
eval "$(grep 'export PERL5LIB' INSTALLFILE)"
Run Code Online (Sandbox Code Playgroud)

更新一个旧答案。我今天要做的是使用进程替换:

source <(
    grep somedir INSTALLFILE
    grep 'export PERL5LIB' INSTALLFILE
)
Run Code Online (Sandbox Code Playgroud)