我有以下脚本(称为./script
),我想与$( ./script )
一起运行,因为结果应该设置一些环境变量。奇怪的是,zenity对话框在脚本终止之前显示两次,当我在$( )
中运行它时,而它只显示一次,如果我按原样运行它。
#!/bin/bash
export select=`zenity --list --column=select "option1" "option2"`
echo "export SELECTION_VAR=$select"
谁能解释一下,为什么它被执行了两次,我怎么才能避免这种情况?
由于script
试图影响父环境,因此需要eval
其结果输出。这种模式很常见,您可以在keychain
工具中找到类似的案例。如果调用keychain
,它会向stdout输出一条可执行eval
的语句,如
SSH_AGENT_PID=1234; export SSH_AGENT_PID;
因此,对于您的情况,您将调用script
:
% eval $(./script) # choose option2
% echo $SELECTION_VAR
option2
同样,你不应该在你的select=
行上使用export
。