为什么 zenity 被执行了两次?

Why is zenity executed twice?

我有以下脚本(称为 ./script),我想 运行 和 $( ./script ) 因为结果应该设置一些环境变量。奇怪的是,当我 运行 在 $( ) 中时,zenity 对话框在脚本终止之前显示了两次,而如果我 运行 按原样它只显示一次。

#!/bin/bash

export select=`zenity --list --column=select "option1" "option2"`
echo "export SELECTION_VAR=$select"

谁能解释一下,为什么它会执行两次,我该如何避免这种情况?

由于 script 试图影响父环境,您需要 eval 其结果输出。这种模式很常见,您可以找到 keychain 工具完成的类似案例。如果您将 keychainit spits out 调用到 stdout 一个 eval-able 语句,例如:

SSH_AGENT_PID=1234; export SSH_AGENT_PID;

所以对于你的情况,你会调用 script 与:

% eval $(./script)  # choose option2
% echo $SELECTION_VAR
option2

此外,您的 select= 行不应该需要 export