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

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

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

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

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

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

答案1

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

grep somedir INSTALLFILE | sh

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

eval "$(grep somedir INSTALLFILE)"

答案2

假设:

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

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

tmp=$(mktemp)
{
    grep somedir INSTALLFILE
    grep 'export PERL5LIB' INSTALLFILE
} > "$tmp"
. "$tmp"

或者你可以评估结果

eval "$(grep somedir INSTALLFILE)"
eval "$(grep 'export PERL5LIB' INSTALLFILE)"

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

source <(
    grep somedir INSTALLFILE
    grep 'export PERL5LIB' INSTALLFILE
)

答案3

您是否考虑过使用 find 的“exec”功能,如下所示:

find somedir -name INSTALLFILE -exec {}\;

相关内容