0

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

#!/bin/bash

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

谁能解释一下,为什么要执行两次以及如何避免这种情况?

4

1 回答 1

1

由于script试图影响父环境,因此您需要eval对其产生的输出。这种模式很常见,您可以找到该keychain工具完成的类似案例。如果您调用keychain,它会向标准输出吐出一个-able 语句,例如:eval

SSH_AGENT_PID=1234; export SSH_AGENT_PID;

因此,对于您的情况,您可以调用script

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

此外,你不应该需要export在线select=

于 2015-08-10T15:06:12.150 回答