1

我有一个脚本,它使用exec命令重定向STDOUTSTDERR一个文件。该脚本在 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

在上面,脚本在该行结束,没有任何错误消息。

我在 variable 周围添加了引号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
4

1 回答 1

1

失败的一个非常可能的原因是$LOCLOG在 VMWare 下的 Solaris 10 上未设置(但在 Solaris 9 上已设置),因此脚本正在尝试(但失败)写入根目录。

您可以通过检查$LOCLOG设置来验证这一点(例如,echo LOCLOG="$LOCLOG"没有任何重定向)。

于 2013-05-06T06:28:59.053 回答