2014-02-20 4 views
1

Я пытаюсь написать функцию bash для инициализации некоторых переменных среды. Я хочу добавить путь к ним, если он уже есть.Установить переменную среды по ссылке в функции

Я бы назвал это как

$ add_to_path /home/brucewayne MYENV 

Это то, что я до сих пор.

# adds $1 to path $2 (e.g. add '/opt/blabla' to $PYTHONPATH) 
add_to_path() { 
    if [ -d "$1" ] && [[ ":${!2}:" != *":$1:"* ]]; then 
     $2="$1:${!2}" 
    fi 
} 

но когда я запускаю его, я получаю

./a.sh: line 6: MYENV=/home/brucewayne:/home/pal: No such file or directory 

Я думаю, что $2="$1:${!2}" не интерпретируется как задание. $ 2 должен стать MYENV, а значение должно быть установлено в MYENV, но вместо этого похоже, что я не могу установить значение по ссылке. Что было бы правильным способом сделать это в bash?

ответ

2

Добавить export в функции:

add_to_path() { 
    if [ -d "$1" ] && [[ ":${!2}:" != *":$1:"* ]]; then 
     export $2="$1:${!2}" 
    fi 
} 
+0

подери я пробовал, но с другой правой стороны и не удалось. благодаря! он работает –

+0

Добро пожаловать, рад, что это сработало. – anubhava

+0

Вы можете сделать это немного более чистым, используя: [[-d "$ 1" && ": $ {! 2}:"! = * ": $ 1:" *]] && export $ 2 = "$ 1: $ {! 2 }». Если бы .. то .. fi конструкция больше не понадобилась. – AsymLabs

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