2015-06-19 28 views
0

我在solaris 11中運行腳本,其結果取決於使用的shell。重定向回聲與未定義的變量

腳本有迴音重定向至一個環境值給出一個文件:

echo "STARTING EXEC" >> $FILE 

PS。 EXEC只是腳本顯示的消息,它不使用exec命令。

如果我執行該腳本而無需(使用/usr/bin/ksh)中定義的變量FILE:

./start.sh[10]: : cannot open 

和腳本繼續執行。

使ksh的標誌是:

echo $- 

imsuBGEl 

但如果我更改爲/usr/xpg4/bin/sh,劇本給我看在標準輸出回波並沒有顯示錯誤。

爲XPG4 SH的標誌是:

echo $- 

imsu 

我試圖改變標誌與set +-(我不能刪除薩爾瓦多標誌,但BG被刪除OK),但不能獲得相同的行爲。

有沒有什麼我可以做到使用ksh得到相同的結果而沒有cannot open error

/usr/bin/ksh --version 

version   sh (AT&T Research) 93u 2011-02-08 

我希望腳本繼續下去,顯示標準輸出消息,而不是顯示就像現在這樣的錯誤。

就像在評論中說的shellter一樣,好的事情是在做任何事之前檢查FILE變量是否被定義。這是一個從HPUXSOLARIS環境的腳本migration,並且客戶端認爲它們必須具有與以前相同的結果(我們在執行之前未設置FILE變量來測試它)。

+0

'$ {FILE:?_ Var_FILE_NOT_SET}'可能有幫助。祝你好運。 – shellter

+0

感謝評論shellter。問題是,不僅有一個腳本,有超過一千(我的錯,我沒有解釋得很好,對不起),我不知道我是否允許改變它們。 –

+0

啊,1000s的文件修改,這是有所作爲;-) ...讓我們回到基礎。我不太瞭解你的'/ usr/xpg4/bin/sh,腳本在stdout中顯示回顯,並且沒有錯誤。所以你看到'STARTING EXEC'?是?而在ks93中,腳本停止在那一點,還是隻是錯誤消息'./start.sh[10]::無法打開'。劇本是否會繼續運行?請編輯您的問題,告訴我們'我希望腳本停止'或'我希望腳本繼續前進'。最後,正如msg提到EXEC,你使用的是shell命令'exec'。如果是這樣,請包括確切的cmd – shellter

回答

0

你很可能運行Solaris 11,而不是64的Solaris

如果您希望您的腳本的Solaris 11下工作,而無需到處尋找僞造重定向,你可以簡單地更換所有shebangs(第一行)通過#!/usr/xpg4/bin/sh

0

我們要採取的最終解決方案是install the ksh88 package並使用它像默認外殼(/usr/sunos/bin/ksh)。這個shell具有客戶端以前的相同行爲,我們可以讓腳本不做任何修改。

在Solaris 11中使用的KSH是93(http://docs.oracle.com/cd/E23824_01/html/E24456/userenv-1.html#shell-1

感謝@jlliagre和@shellter對你有所幫助。