2013-05-06 131 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