我有一个包含某些安装说明的文本文件,并且我知道我可以 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 {}\;