我有一个声明一些变量的 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"
无需使用管道。假设您在第一个脚本中有
export
命令,这些变量将可用于第二个脚本。
. ./path/to/script
command_that_has_access_to_X_and_Y
管道只是一种将一个脚本的标准输入连接到另一个脚本的标准输出的工具。它是使用临时文件的有效替代方案;
x | y
或多或少与相同
x > tmp.txt
y < tmp.txt
除了操作系统处理从
x
到 y
传递文本的细节,以便两者可以同时运行,y
在 x
生成输入时接收输入。
您可以通过 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