2011-02-08 6 views
0

Я могу сказать, что это самая сумасшедшая вещь, которую я видел за долгое время.Linux/Unix Scripting - самое странное поведение в нескольких строках - переменная, но пустая

У меня есть это (часть) ш скрипт работает на 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 в код сценария (первый фрагмент), все будет работать.

EDIT: GOLD_DIR экспортируется в /etc/profile (с использованием export GOLD_DIR=/share/apps/GOLD_Suite/GOLD)

Любые идеи, почему?

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

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

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

ответ

0

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

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

+0

Нет, это не работает. Я могу видеть содержимое переменной, если я делаю эхо сразу после вашего утверждения, но я все еще получаю сообщение ERROR: .... – MalteseUnderdog

+0

Я использую bash - но скрипт shbang - #!/Bin/sh. Я изменил на [[]] вместо [], и я все еще получаю ошибку darn – MalteseUnderdog

+0

@MalteseUnderdog: Так что это что-то с переменным значением, вероятно ... Можете ли вы попробовать 'declare -p' на нем? Может быть, в этом есть что-то подозрительное. Если вы разделите рабочий экспорт GOLD_DIR = blabla на назначение и затем экспортируете, что-то изменит? Также попробуйте в режиме POSIX, например, в POSIXLY_CORRECT envvar. Если вы измените условие на '[-z" $ GOLD_DIR "]', это сработает? –

0

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

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

. /etc/profile 

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