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

时间:2012-01-12 05:27:51

标签: bash

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

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

3 个答案:

答案 0 :(得分:5)

通过安排当前的shell来读取带有'process substitution'的命令:

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

或者:

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

(这比.命令更明显,但不是那么简洁。)

答案 1 :(得分:2)

您可以在不需要临时文件的情况下执行此操作,并且 高度 阻止使用eval,因为您将系统打开到各种它的安全问题。

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

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

答案 2 :(得分:1)

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

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

但是如果你想避免创建临时文件

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

应该这样做。