我有一个脚本
test.sh
:
#!/bin/bash
export VAR1=abc123
echo $VAR1
我希望在运行此脚本的 shell 中设置
test.sh
中设置的变量,因此我使用 source
:
$ source test.sh
abc123
$ echo $VAR1
abc123
但是假设我想用
test.sh
的输出做一些事情。看来,如果我通过管道输出 test.sh
,则获取变量不再有效:
$ VAR1=xyz
$ source test.sh | sed 's/abc/xyz/g'
xyz123
$ echo $VAR1
xyz
与预期相反:
$ VAR1=xyz
$ source test.sh | sed 's/abc/xyz/g'
xyz123
$ echo $VAR1
abc123
如果我想使用一个脚本设置变量并修改输出,如何解决这个问题?
您可以将 shell 的标准输出重定向到进程替换并在获取脚本后恢复它:
$ VAR1=xyz
$ exec 3>&1 > >(sed 's/abc/xyz/g')
$ source test.sh; exec >&3; wait
xyz123
$ echo $VAR1
abc123
$