Я написал следующий скрипт для установки некоторых переменных среды, когда это необходимо.
#!/bin/sh
export BASE=/home/develop/trees
echo $BASE
export PATH=$PATH:$BASE
echo $PATH
Ниже команды и результаты, которые я вижу на своем терминале: скрипт выполняется, но переменные не устанавливаются в конце.
~$: ./script.sh
/home/develop/trees
/bin:......:/home/develop/trees
~$: echo $BASE
~$:
В чем дело? Заранее спасибо. Mirko
источник
export
передавать переменные в подоболочки, подоболочка - это копия вашей текущей оболочки, включая переменные и функции и т. Д. Экспортированные переменные копируются в новые процессы, порожденные из оболочки, независимо от того, является ли этот процесс другой оболочкой или нет. Во-вторых,.
это команда POSIX для поиска. Bash добавляет егоsource
как более читаемый синоним, но вы не можете полагаться на то, что он доступен в sh. Наконец,. ./script
вместо того. script
, чтобы избежать неожиданностей. mywiki.wooledge.org/BashFAQ/060Когда вы запускаете скрипт, он запускается в подоболочке. Переменные действительны только в контексте этой подоболочки. Установите их в вашем
.bashrc
или.profile
и читайте о переменных и подоболочках . Этоexport
утверждение работает вниз по иерархии (текущая оболочка и все ее подоболочки), а не как в вашем примере.В качестве альтернативы (если вы действительно хотите, чтобы скрипт воздействовал на окружающую среду вашей текущей оболочки), запустите его следующим образом:
Это заставляет его работать в вашей текущей оболочке, но также не передает переменные вверх по иерархии.
источник
Я часто хочу установить переменную среды без хлопот.
Вот что я добавляю в мой .bashrc для реализации этого удобства.
источник
Вы можете попробовать что-то вроде этого
источник