从 Bash 中的管道 while 循环导出?

发布于 2024-12-26 07:48:29 字数 150 浏览 0 评论 0原文

我正在尝试修改一些导出。我知道这段代码不起作用,因为它的主体在子 shell 中执行,但如何修复它?

export | sed 's/gcc.4.2/gcc64/g' | while read line; do $line; done

I'm trying to modify some exports. I understand that this code doesn't work because its body executes in a subshell, but how do I fix it?

export | sed 's/gcc.4.2/gcc64/g' | while read line; do $line; done

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一个人的夜不怕黑 2025-01-02 07:48:29

通过安排当前 shell 使用“进程替换”来读取命令:

. <(export | sed 's/gcc.4.2/gcc64/g')

或者:(

source <(export | sed 's/gcc.4.2/gcc64/g')

这更明显,但不像 . 命令那样简洁)。

By arranging for the current shell to read the commands with 'process substitution':

. <(export | sed 's/gcc.4.2/gcc64/g')

Or:

source <(export | sed 's/gcc.4.2/gcc64/g')

(which is more visible, though not as succinct, as the . command).

心作怪 2025-01-02 07:48:29

您可以在不需要临时文件的情况下执行此操作,并且当您向各种类型的系统开放时,我强烈不鼓励使用eval它的安全问题。

while read -r line; do $(sed -n 's/gcc.4.2/gcc64/gp' <<<"$line"); done < <(export)

另外,通过使用 sed -n ,只会导出 sed 更改的那些条目。

You can do this without the need for a temp file and I highly discourage the use of eval as you open up your system to all kinds of security problems with it.

while read -r line; do $(sed -n 's/gcc.4.2/gcc64/gp' <<<"$line"); done < <(export)

Also, by using sed -n, this only exports those entries that sed changed.

如果没有你 2025-01-02 07:48:29

该文件可能是更好的解决方案:

export | sed 's/gcc.4.2/gcc64/g' > ~/tmp/file
. ~/tmp/file

但如果您想避免创建临时文件,

eval $( export | sed 's/gcc.4.2/gcc64/; s/$/;/' )

应该可以解决这个问题。

The file is probably the better solution:

export | sed 's/gcc.4.2/gcc64/g' > ~/tmp/file
. ~/tmp/file

but in case you want to avoid the creation of a temp file

eval $( export | sed 's/gcc.4.2/gcc64/; s/$/;/' )

should do the trick.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文