如何使用新的环境变量管道到下一个命令?

时间:2013-09-08 14:14:21

标签: bash environment-variables

我有一个shell脚本声明了一些变量:

export X=1
export Y=2

我希望能够做到这样的事情:

. ./path/to/script | command_that_has_access_to_X_and_Y

基本上,以某种方式获取脚本,以便管道后面的命令可以访问这些变量。这样的事情有可能吗?

编辑: 我要运行的其中一个命令是pg_dump,凭据在shell文件中:

基本上我正试图运行它:

bash -c "pg_dump \$PRODUCTION_DB --password \$PRODUCTION_PASSWORD --user \$PRODUCTION_USERNAME --host \$PRODUCTION_HOST > #{backup_name}.sql"

2 个答案:

答案 0 :(得分:2)

无需使用管道。假设您在第一个脚本中有export个命令,那么这些变量将可用于第二个脚本。

. ./path/to/script
command_that_has_access_to_X_and_Y

管道只是将一个脚本的标准输入连接到另一个脚本的标准输出的工具。它是使用临时文件的有效替代方案; x | y

或多或少相同
x > tmp.txt
y < tmp.txt

除了操作系统处理从xy传递文本的详细信息,以便两者可以同时运行,y接收输入x会产生它

答案 1 :(得分:1)

您可以通过echo发送:

左边的脚本:

#!/bin/bash
X='Something X'
Y='Something Y'
echo "$X"
echo "$Y"

右边的命令:

... | bash -c "read -r X; read -r Y; echo \"\$X : \$Y\""

产地:

Something X : Something Y