1
我有一個腳本,它使用exec
命令將STDOUT
和STDERR
重定向到一個文件。該腳本在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>&1
跑sh -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
感謝您的回覆。那是我做的第一件事。它肯定是集。 – Hameed 2013-05-06 23:09:59
好的:Solaris 10上的'$ LOCLOG'的值有什麼特別之處嗎?每個系統上的$ LOCLOG的值是多少? '$ LOCLOG'目錄的權限有什麼不同? 'LOCLOG'是Solaris 10上的文件還是Solaris 9上的目錄?哪個用戶正在運行這個腳本? NFS掛載的文件系統給用戶帶來「根源」悲痛的機會嗎? – 2013-05-06 23:22:51
以上都不是。我運行的其他程序沒有訪問和寫入問題。當用戶登錄時,LOCLOG的值每天都在變化:'/ home/hameed/test/local/etc/log/0508' – Hameed 2013-05-07 00:25:10