Wpadłem na dziwny problem. Wstawiłem kilka zmiennych env .bashrc
i działa to tak, jak powinno:
echo $HADOOP_HOME
/home/me/dist/hadoop
Ale zmienna env nie jest dostępna podczas wykonywania skryptów bash. Załóżmy, że tworzę /tmp/sample.sh
z poniższą zawartością:
#! /bin/bash
echo $HADOOP_HOME
Kiedy uruchamiam powyżej skryptu, wyświetla pusty wiersz:
/tmp/sample.sh
command-line
bash
scripts
environment-variables
Mehraban
źródło
źródło
.bashrc
? Domyślam się, że nieexport
ing:export HADOOP_HOME=/home/me/dist/hadoop
po uruchomieniu/tmp
sample.sh` (który spawnuje nowybash
z nowym środowiskiem) HADOOP_HOME nie znajduje się w nowym środowisku.Odpowiedzi:
Jest tak, ponieważ
HADOOP_HOME
zmienna nie jest eksportowana:Po uruchomieniu skryptu powłoki skrypt ten będzie działał we własnej instancji bash (tak właśnie
#!/bin/bash
działa), która jest potomną powłoką bieżącej. Zmienne nie są domyślnie przekazywane do powłok potomnych, tylko jeśli są eksportowane. Pomyśl o każdej sesji bash jako niezależnej (w dużej mierze są). Zwykle nie chcesz, aby zmienne zdefiniowane w jednym zanieczyszczały środowisko innego. W przypadkach, w których jest to konieczne, użyjexport
.źródło