Я определил переменные в /etc/bashrc
следующем виде:
export VAR1=yadayada
У меня есть скрипт bash, который вызывается runner.sh
следующим кодом ниже => мы запускаем там другой скрипт, run_test.sh
который запускает скрипт python. Скрипт python использует переменную env, упомянутую выше.
Вот runner.sh
содержание:
#!/bin/bash
exec /home/john/run_test.sh
При запуске runner.sh
из оболочки возникает ошибка, что переменная env не определена.
Если я запускаю то же самое runner.sh
из crontab, при этом переменная env также определена в crontab, то все идет правильно.
Можете ли вы объяснить, почему при запуске оболочки мы не «собираем» переменную env из bashrc
, и как это можно исправить?
решение1
Попробуй это,
После редактирования /etc/bashrc (кстати, какую версию Linux вы используете? Я обычно помещаю такие вещи в ~/.bashrc), попробуйте выполнить следующую команду
source /etc/bashrc
и затем запустите ваш скрипт runner.sh.
теперь запустите
set
команду, чтобы увидеть, отображается ли переменная среды в списке.
решение2
Я попробовал сделать то же самое, что и вы, на моей системе все отлично работает. Как вы пытаетесь добраться до переменных окружения с помощью python? Убедитесь, что pyhton использует метод os.environ.
сначала проверьте переменные окружения
[john@tilki ~]$ grep VAR /etc/bashrc
export VAR1=bla
[john@tilki ~]$ env | grep VAR
VAR1=bla
содержание скриптов
[john@tilki ~]$ cat runner.sh
#! /bin/bash
echo $VAR1
python print_var.py
[john@tilki ~]$ cat print_var.py
import os
print os.environ['VAR1']
запустить скрипт runner.sh
[john@tilki ~]$ ./runner.sh
bla
bla