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

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

У меня есть этот (часть) сценарий 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: Я не знаю, важно ли это, но это сценарий появления в PVM.

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

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

Ответы [ 2 ]

0 голосов
/ 09 февраля 2011

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

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

. /etc/profile

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

0 голосов
/ 08 февраля 2011

Итак, переменная установлена.Если вы просто сделаете export GOLD_DIR вместо строки с комментариями (без установки значения), это будет работать?Это единичный случай?Это что-то вроде bash на CentOS?Попробуйте использовать [[]], чтобы проверить, что работает неправильно.

...