如何从 shell 脚本获取变量并通过管道传输脚本的输出?

问题描述 投票:0回答:1

我有一个脚本

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

如果我想使用一个脚本设置变量并修改输出,如何解决这个问题?

bash shell pipe export variable-assignment
1个回答
0
投票

您可以将 shell 的标准输出重定向到进程替换并在获取脚本后恢复它:

$ VAR1=xyz
$ exec 3>&1 > >(sed 's/abc/xyz/g')
$ source test.sh; exec >&3; wait
xyz123
$ echo $VAR1
abc123
$
© www.soinside.com 2019 - 2024. All rights reserved.