У меня есть сценарий, который использует команду exec
для перенаправления STDOUT
и STDERR
в файл. Скрипт отлично работает в Solaris 9. Я тестирую его на Solaris 10 на VMware, и он не работает в команде exec
.Перенаправление 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
ОК: есть ли что-то особенное о значении '$ LOCLOG' на Solaris 10? Какова ценность '$ LOCLOG' для каждой системы? Любая разница в разрешениях в каталоге '$ LOCLOG'? Есть ли опасность, что '$ LOCLOG' является файлом в Solaris 10, но каталогом на Solaris 9? Какой пользователь запускает этот скрипт? Есть вероятность, что файловая система, установленная NFS, даст пользователю «root» горе? –
Ничего из перечисленного. У других программ, которые я запускал, нет проблем с доступом и записью на него. Значение LOCLOG изменяется ежедневно, когда пользователь входит в систему: '/ home/hameed/test/local/etc/log/0508' – Hameed