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