【发布时间】:2021-12-29 06:44:02
【问题描述】:
我无法从标准输出中导出环境变量。
我做错了什么以及如何解决?
$ cat env.py
print("export TEST_ME=123")
$ python env.py
export TEST_ME=123
$ echo $(python env.py)
export TEST_ME=123
$ echo $(python env.py) | . /dev/fd/0
bash: echo: write error: Broken pipe
$ echo "export TEST_ME=123" | . /dev/fd/0 && echo $TEST_ME
$
同样的命令在 zsh 中工作
$ zsh
% echo "export TEST_ME=123" | . /dev/fd/0 && echo $TEST_ME
123
%
更新:
macOS 上的 Python3.9 得到了损坏的管道,所以我只尝试使用 echo
$ bash --noprofile --norc
bash-3.2$ . <(echo "export TEST_ME=123") && echo $TEST_ME
bash-3.2$ . <(python3.9 env.py)
bash-3.2$ Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
BrokenPipeError: [Errno 32] Broken pipe
bash-3.2$ . <(python2 env.py)
bash-3.2$ close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
bash-3.2$
【问题讨论】:
-
source <(python ./env.py); declare -p TEST_ME -
我没有收到该命令的
Broken pipe错误。无论如何,echo毫无意义;python env.py | . /dev/fd/0至少应该一样好,而且逃跑的麻烦更少。 -
source <(echo export TEST_ME=456); declare -p TEST_ME -
source <(printf 'export TEST_ME=789'); declare -p TEST_ME
标签: python bash macos environment-variables