Linux/Unix Scripting - самое странное поведение в нескольких строках - переменная установлена, но пуста

Я могу сказать вам, что это самая безумная вещь, которую я видел за долгое время.

У меня есть этот (часть) сценарий sh работает на CentOS 5.4:

# Check GOLD_DIR`
echo $GOLD_DIR"<--"
#export GOLD_DIR=/share/apps/GOLD_Suite/GOLD <uncommenting this line works!!
if [ "X$GOLD_DIR" =  "X" ] ; then
  echo "ERROR: GOLD_DIR is (probably) not set on host ${HostName}" >> ${3}
  exit 1
fi

И это дает следующий вывод:

/share/apps/GOLD_Suite/GOLD<-- 
Waiting for 5 seconds ..... Testing output

The test script did spawn a job (i.e. PVM ran OK), 
but errors were detected in the test script output 
on the host machine: Below is the output

ERROR: GOLD_DIR is (probably) not set on host xxx.yyy.local

Как вы можете видеть GOLD_DIR переменная установлена ​​(скрипт находит ее, как показано в выводе с постфиксом)<--")! Если я раскомментирую экспорт GOLD_DIR Переменная в коде скрипта (первый фрагмент) все работает.

РЕДАКТИРОВАТЬ: GOLD_DIR экспортируется в /etc/profile (с помощью export GOLD_DIR=/share/apps/GOLD_Suite/GOLD)

Есть идеи почему?

Примечание 1: я не знаю, важно ли это, но это скрипт spawn на PVM.

Примечание 2: сценарий написан на sh #!/bin/sh но я использую Bash...

Edit3: я получил его работать, но я не знаю, почему! - Итак, я переименовал имя хоста (с помощью sudo hostname abc) к названию машины, на которой я ssh (например, abc). До того, как PVM был в списке полное имя машины abc.mycompany.local, Обратите внимание, что оба abc.mycompany.local а также abc это та же машина.

2 ответа

Я считаю, что это может быть связано с неинтерактивным характером работы. Задания, запускаемые из сценариев оболочки, не обязательно будут источником /etc/profile, поэтому они могут не брать вашу переменную ${GOLD_DIR}. (Если вы явно не изменили его поведение, bash будет использовать только /etc/profile для оболочки входа.)

Попробуйте добавить:

. /etc/profile

в начале вашего сценария, чтобы посмотреть, изменит ли это что-нибудь. Если нет, когда вы выводите оператор ошибки, добавьте куда-нибудь ${GOLD_DIR}, чтобы увидеть, доступна ли переменная в этом операторе.

Итак, переменная установлена. Если вы просто делаете export GOLD_DIR вместо закомментированной строки (без установки значения) будет работать?

Также. Это единичный случай? Это что-то вроде bash на CentOS? Попробуйте использовать [[ ]], чтобы проверить, что работает неправильно.

Другие вопросы по тегам