我正在尝试修改一些出口。我知道这段代码不起作用,因为它的主体在子shell中执行,但我该如何修复呢?
export | sed 's/gcc.4.2/gcc64/g' | while read line; do $line; done
答案 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/$/;/' )
应该这样做。