2013-05-06 65 views
1

我有一個腳本,它使用exec命令將STDOUTSTDERR重定向到一個文件。該腳本在Solaris 9下正常工作。我在VMware上的Solaris 10上測試它,並在exec命令中失敗。在Shell腳本中重定向STDOUT和STDERR

prog=`basename $0` 
log="${LOCLOG}/${prog}$$" 

if test -z "$LDDEBUG" 
then 
    exec > ${log} 2>&1 

    chmod 644 "${log}" 
else 
    set -x 
fi 

在上面,腳本在該行結束,沒有任何錯誤消息。

我在變量exec > "${log}" 2>&1附加了引號。這可以讓腳本運行到最後,但它不會創建日誌文件。

然後,我的文件路徑試了一下:

exec > /tmp/blahblah1 2>&1 

...和它的工作。它創建了文件並寫入了它。但是這並不能解決我的問題,因爲必須在腳本中生成日誌文件名。

我迷失了這裏的解決方案,我知道它可能非常簡單,但我不能想到其他任何事情都無需對腳本進行任何重大更改。

====== 輸出sh -x

[email protected][60] sh -x /home/hameed/test/local/bin/qikload 
+ basename /home/hameed/test/local/bin/qikload 
prog=qikload 
datefmt=+%H:%M:%S 
dayfmt=+%y%m%d 
log=/home/hameed/test/local/etc/log/0508/qikload2199 
+ test -z 
+ exec 

=======的

然後我刪除了2>&1sh -x和它去通過該行。失敗的

+ basename /home/hameed/test/local/bin/qikload 
prog=qikload 
datefmt=+%H:%M:%S 
dayfmt=+%y%m%d 
log=/home/hameed/test/local/etc/log/0508/qikload27213 
+ test -z 
+ exec 
+ chmod 644 /home/hameed/test/local/etc/log/0508/qikload27213 
+ date +%H:%M:%S 
now=10:44:23 
+ echo Log: 10:44:23 Commencing loads 

回答

1

一個非常合理的原因是$LOCLOG沒有設置在VMWare下的Solaris 10(但被設置在Solaris 9),所以腳本試圖(但失敗)的根目錄寫入。

您可以通過檢查設置爲$LOCLOG來驗證此項(例如,echo LOCLOG="$LOCLOG"沒有任何重定向)。

+0

感謝您的回覆。那是我做的第一件事。它肯定是集。 – Hameed 2013-05-06 23:09:59

+1

好的:Solaris 10上的'$ LOCLOG'的值有什麼特別之處嗎?每個系統上的$ LOCLOG的值是多少? '$ LOCLOG'目錄的權限有什麼不同? 'LOCLOG'是Solaris 10上的文件還是Solaris 9上的目錄?哪個用戶正在運行這個腳本? NFS掛載的文件系統給用戶帶來「根源」悲痛的機會嗎? – 2013-05-06 23:22:51

+0

以上都不是。我運行的其他程序沒有訪問和寫入問題。當用戶登錄時,LOCLOG的值每天都在變化:'/ home/hameed/test/local/etc/log/0508' – Hameed 2013-05-07 00:25:10

相關問題