Переменная оболочки доступна в командной строке, но не в скрипте

Переменная оболочки доступна в командной строке, но не в скрипте

03.05.2009 02:13:26 Просмотров 28 Источник

В командной строке bash я задаю переменную myPath=/home/user/dir. Я создал скрипт, в который поместил echo $myPath, но он, похоже, не работает. Он не отзывается эхом. Если я пишу echo $myPathв командной строке, это работает, но не в скрипте.

Что я могу сделать, чтобы получить доступ к переменной myPath в скрипте?

У вопроса есть решение - Посмотреть?

Ответы - Переменная оболочки доступна в командной строке, но не в скрипте / Shell variable is available on command line but not in script

Является ответом!
David Z

03.05.2009 02:18:06

Экспортировать переменную:

export myPath=/home/user/dir

Это дает команду командной консоли сделать переменную доступной во внешних процессах и сценариях. Если вы не exportпеременную, она будет считаться локальной для текущей оболочки.

Чтобы просмотреть список экспортируемых переменных, используйте env. Это также можно использовать для проверки правильности определения и экспорта переменной:

$ env | grep myPath
myPath=/home/user/dir
https://stackoverflow.com/questions/815742/shell-variable-is-available-on-command-line-but-not-in-script/815753#comment28794918_815753
используйте export var также в вашем профиле bash-если вы хотите, чтобы ваши скрипты имели доступ к этим переменным. например переменной JAVA_HOME
https://stackoverflow.com/questions/815742/shell-variable-is-available-on-command-line-but-not-in-script/815753#comment82019636_815753
Это вводит в заблуждение. exportне оказывает видимого влияния на текущую оболочку. Это полезно, когда значение переменной должно быть видно подпроцессам, запущенным из текущей оболочки.
https://stackoverflow.com/questions/815742/shell-variable-is-available-on-command-line-but-not-in-script/815753#comment82038955_815753
@tripleee действительно, и если я чего-то не упускаю, это именно то, о чем спрашивается вопрос: Как получить доступ к переменной из подпроцесса (который выполняет сценарий оболочки).
Richard

03.05.2009 02:18:48

как вы назначили переменную? так и должно было быть.:

$ export myPath="/home/user/dir"

затем внутри оболочки программы, как:

#!/usr/bin/env bash
echo $myPath

вы получите желаемые результаты.

https://stackoverflow.com/questions/815742/shell-variable-is-available-on-command-line-but-not-in-script/815755#comment61005326_815755
Если вам нужно использовать это внутри другой строки в кавычках, вы также можете сделать echo " Path is ${myPath}"
pixelbeat

03.05.2009 02:49:22

Вы также можете сделать это, чтобы установить переменную myPath только для myscript

myPath="whatever" ./myscript

Подробнее о допустимом сложном синтаксисе для переменных окружения см.: http://www.pixelbeat.org/docs/env.html

digijock

03.05.2009 05:22:39

Вы должны объявить присвоение переменной с помощью" export " как таковой:

export myPath="/home/user/dir"

Это приведет к тому, что оболочка будет включать переменную в среду подпроцессов, которые она запускает. По умолчанию переменные, которые вы объявляете (без "экспорта"), не передаются в подпроцесс . Вот почему вы изначально не получили ожидаемого результата.

Закрыть X