2013-07-08 2 views
2

У меня есть .sh файл: a.shBash/Take значение из файла .sh

В этом сценарии, в последней строке, у меня есть следующий:

rt = $(bash ...). 

Я хочу, чтобы получить эту ЛТ. Я стараюсь сделать следующее:

bash a.sh или echo $(bash a.sh), но его значение rt не указано.

+0

'a.sh' бежал в подоболочке. есть ли у вас привилегия изменить 'a.sh'? – Kent

ответ

2

Вы можете источник скрипт для того, чтобы запустить его в том же контексте вашего interacti ve session:

source a.sh && echo ${rt} 
+0

Я тоже думал об источнике. однако, я чувствую себя не так безопасно. хорошо, что это зависит от того, какие вещи находятся в a.sh ... – Kent

+0

+1 для моих знаний: D – mirkobrankovic

+0

@Kent - Я не могу представить случай, когда 'a.sh' будет более безопасным, чем' source a.sh'. И если он есть, вы все равно можете породить подоболочку, только для источника 'a.sh'. – mouviciel

3

Поместите echo rt в конце вашего сценария, чтобы распечатать его до стандартного вывода.

Если вы не можете изменить исходный скрипт, который вы можете использовать

source a.sh && echo ${rt} 

как уже упомянуто @mouviciel, но для дополнительной безопасности (а не перезаписывать env), вы можете использовать его в еще один субоболочке

bash 
source a.sh && echo ${rt} 
exit 

Или $(source a.sh && echo ${rt})

+0

Спасибо, но я не могу изменить скрипт. – user2490373

+0

Извините, вы этого не сказали. Обновлено –

1

Запустить сценарий с помощью.. (например, . ./a.sh). Таким образом, не будет запущено новое , и в среде вызывающего абонента будет присутствовать переменная rt. Имейте в виду, что другие переменные могут быть установлены и/или изменены. Это может вызвать проблемы.

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