2011-02-08 35 views
0

我可以告訴你,這是我長期以來看到的最瘋狂的事情。Linux/Unix腳本 - 幾行中最奇怪的行爲 - 變量集但是爲空

我有這樣的(部分)在CentOS 5.4上運行sh腳本:

# 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變量的導出,則一切正常。

編輯:(使用export GOLD_DIR=/share/apps/GOLD_Suite/GOLD

任何想法,爲什麼GOLD_DIR/etc/profile出口?

注1:我不知道這是否重要,但這是PVM上的衍生腳本。

注2:劇本是寫在SH #!/bin/sh但我使用bash ...

EDIT3:我得到了它的工作,但我不知道爲什麼! - 好吧,我所做的就是將主機名(使用sudo hostname abc)重命名爲我登錄的計算機的名稱(例如abc)。在PVM列出機器的全名abc.mycompany.local之前。請注意,abc.mycompany.localabc是同一臺機器。

回答

0

因此var被設置。如果你只是做export GOLD_DIR而不是註釋行(沒有設置值),它會工作嗎?

另外。這是一個孤立的案例?它在CentOS上出現嗎?嘗試使用[[]]來檢查什麼是錯誤的。

+0

不,它不起作用。我可以看到變量的內容,如果我在你的語句後立刻進行回顯,但我仍然得到ERROR:...位。 – MalteseUnderdog 2011-02-08 11:06:08

0

我認爲這可能與工作的非互動性有關。從shell腳本運行的作業不一定會源於/ etc/profile,因此它們可能沒有選擇你的$ {GOLD_DIR}變量。 (除非你已經明確改變其行爲,bash將唯一來源/ etc/profile中的登錄shell)

嘗試增加:

. /etc/profile 

在你的腳本開始只是爲了看看改變任何東西。如果不是,當您回顯錯誤語句時,請在$ {GOLD_DIR}的某個地方添加以查看該語句中該變量是否仍然可用。