1

コマンドを使用してファイルexecにリダイレクトするスクリプトがあります。スクリプトは Solaris 9 で正常に動作します。VMware 上の Solaris 10 でテストしていますが、コマンドで失敗します。STDOUTSTDERRexec

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

失敗のもっともらしい原因の 1 つは、$LOCLOGVMWare の下の Solaris 10 では設定されていないため (ただし、Solaris 9 では設定されている)、スクリプトがルート ディレクトリに書き込もうとしている (ただし失敗している) ことです。

が設定されていることを確認することで、これを検証できます$LOCLOG(たとえば、echo LOCLOG="$LOCLOG"リダイレクトなし)。

于 2013-05-06T06:28:59.053 に答える