我有一个脚本使用exec
命令将STDOUT
和STDERR
重定向到文件。该脚本在Solaris 9下运行正常。我在VMware上的Solaris 10上测试它,它在exec
命令失败。
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
ld-test@lunar-tst[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
答案 0 :(得分:1)
失败的一个非常可信的原因是在VMWare下的Solaris 10上未设置$LOCLOG
(但是在Solaris 9上设置),因此脚本正在尝试(但是失败)在根目录中写入。 / p>
您可以通过检查$LOCLOG
是否已设置来验证这一点(例如,echo LOCLOG="$LOCLOG"
没有任何重定向)。