На этот вопрос уже есть ответ здесь:
У меня есть сценарий bash, который у меня есть добавлен как запускаемое приложение. Он выполняет множество операций экспорта и присвоения псевдонимов.
#! /bin/bash
alias devhm='cd ${DEV_HOME}; ll';
alias wlhm='cd ${WL_HOME}; ll';
alias dirch='watch --interval=1 "ls -la"';
alias vols='watch --interval=1 "df -h"';
alias svn-update='svn update --depth infinity ./*';
alias mci="~/mci.sh";
alias vncserver="vncserver -geometry 1680x1050";
alias ..="cd ..";
alias hist="history | grep ";
export PROXY_HOST=proxy.my.setup;
export PROXY_PORT=3128;
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH/usr/lib/oracle/12.1/client64/lib;
export ORACLE_HOME=/usr/lib/oracle/12.1/client64;
export TNS_ADMIN=${ORACLE_HOME}/network/admin;
echo "DONE!";
Но ни одно из этих значений больше не доступно в моих терминальных сессиях. Даже когда я запускаю сценарий прямо в терминал, например, так:
./setup.sh
Я вижу "ГОТОВО!" приглашение напечатано, но не заданы псевдонимы или переменные env.
Если я скопирую и вставлю содержимое файла в терминал, будут установлены псевдонимы и переменные env.
Я также попытался добавить строку для выполнения сценария из .bashrc
, но все еще не заданы псевдонимы или переменные env.
Есть идеи, что здесь может происходить? Также может кто-нибудь предложить лучший способ добавления этих переменных / псевдонимов env в каждый сеанс терминала?
В Вашем .bashrc
ссылаются на Ваш пользовательский сценарий запуска с помощью . setup.sh
вместо ./setup.sh
. Это заставит его выполняться в контексте текущей сессии вместо того, чтобы быть выполненным как отдельная программа с ее собственным контекстом.