2015-08-10 2 views
0

У меня есть следующий скрипт (называемый ./script), который я хочу запустить с $(./script), потому что результат должен установить некоторую переменную среды. Странно, что диалог zenity отображается дважды, прежде чем скрипт завершится, когда я запустил его в $(), пока он отображается только один раз, если я запустил его как есть.Почему zenity выполняется дважды?

#!/bin/bash 

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

Может кто-нибудь объяснить, почему он выполняется дважды и как я могу избежать этого?

ответ

1

С script пытается повлиять на родительскую среду, вам нужно получить eval результат. Этот шаблон является общим, и вы можете найти аналогичный случай, сделанный инструментом keychain. Если вы вызываете keychain, it spits out в стандартного выводаeval -able заявления как:

SSH_AGENT_PID=1234; export SSH_AGENT_PID; 

Так что для вашего дела, вы бы вызвать script с:

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

Кроме того, вы не должны export на вашей линии select=.

+0

Запуск скрипта с 'eval $ (./script)' швов, чтобы сделать трюк, но в чем разница между 'eval $ (./script)' и '$ (./script)'? Оба варианта правильно задают переменную среды, но только в последнем случае дважды отображается диалог зенитности. –

+0

'./Script' не позволит родителям' eval' 'export'. 'eval./script' описан [здесь] (http://askubuntu.com/questions/174721/is-eval-cat-filename-the-same-as-source-filename). '$ (./ script)' просто запускает ваш скрипт в подзаголовке; Тем не менее, я не вижу, чтобы он работал зенит дважды. –

Смежные вопросы