0

次のスクリプト (と呼ばれる./script) があります。これを使用して実行したい$( ./script )のは、結果によって何らかの環境変数が設定される必要があるためです。不思議なことに、 で実行するとスクリプトが終了する前に zenity ダイアログが 2 回表示されますが$( )、そのまま実行すると 1 回だけ表示されます。

#!/bin/bash

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

なぜそれが2回実行されるのか、どうすればこれを回避できるのか、誰でも説明できますか?

4

1 に答える 1

1

scriptは親環境に影響を与えようとしているため、その結果の出力が必要ですeval。このパターンは一般的であり、ツールによって実行される同様のケースを見つけることができますkeychain。を呼び出すkeychainと、次のような-able ステートメントがstdoutに吐き出されます。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 に答える