2013-05-06 4 views
1

У меня есть сценарий, который использует команду 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 

ответ

1

Один очень правдоподобной причиной отказа является то, что $LOCLOG не установлена ​​на Solaris 10 под VMWare (но устанавливается на Solaris 9), поэтому сценарий пытается (но отсутствие) писать в корневом каталоге.

Вы можете проверить это, установив, что установлен $LOCLOG (например, echo LOCLOG="$LOCLOG" без какого-либо перенаправления).

+0

Спасибо за ответ. Это было первое, что я сделал. Он определенно установлен. – Hameed

+1

ОК: есть ли что-то особенное о значении '$ LOCLOG' на Solaris 10? Какова ценность '$ LOCLOG' для каждой системы? Любая разница в разрешениях в каталоге '$ LOCLOG'? Есть ли опасность, что '$ LOCLOG' является файлом в Solaris 10, но каталогом на Solaris 9? Какой пользователь запускает этот скрипт? Есть вероятность, что файловая система, установленная NFS, даст пользователю «root» горе? –

+0

Ничего из перечисленного. У других программ, которые я запускал, нет проблем с доступом и записью на него. Значение LOCLOG изменяется ежедневно, когда пользователь входит в систему: '/ home/hameed/test/local/etc/log/0508' – Hameed

Смежные вопросы