Попытка перенаправить вывод сценария оболочки в файл и стандартный вывод.команда cd в скрипте вызывает странное поведение - PullRequest
0 голосов
/ 04 февраля 2011

Вот ситуация:

У меня есть сценарий оболочки - script.ksh

Я звоню из Java-программы, и мне нужен стандартный вывод из сценария в Java-программе.

Мне также нужно перенаправить вывод в файл, и если в какой-то момент сценарий завершится ошибкой, я должен отправить письмо с прикрепленным к нему файлом.

, поэтому файл должен быть закрытдо выхода из сценария, чтобы почтовая программа могла его отправить.

У меня все работает правильно.

За исключением 1 вещи - если в сценарии есть какой-либо оператор 'cd', файл нене закрывайте до того, как скрипт закончится.Пожалуйста, помогите мне здесь

Не уверен, почему это происходит.

Вот упрощенная версия кода.

#!/bin/ksh
#Need to redirect output to file and stdout
exec 6>&1  #save stdout in [6]
exec 1>shell.log 2>&1  #redirect stderr and stdout to file


#if any error happens reset stdout and print the log contents
trap '
echo "Error Trap";
exec 1>&- 1>&6 6>&-;
echo | cat shell.log>&1;
echo "send the log file by mail";
exit 1' ERR

#cd / #Uncomment and the script behaves differently
echo "some task"
./somescript.ksh   #this requires me to cd to its directory and then execute

trap - ERR  #End the ERR trap


#in case of normal exit print the log contents
trap '

echo "Normal Exit"
exec 1>&- 1>&6 6>&-;
echo | cat shell.log>&1;
exit 1' EXIT

1 Ответ

1 голос
/ 04 февраля 2011

Вы открываете файлы в текущем каталоге, а затем меняете каталоги. Попробуйте использовать абсолютные пути для этих файлов.

Почему вы пипец от echo до cat? Это не влияет на ваш сценарий. Просто cat файл. Также нет необходимости перенаправлять стандартный вывод на стандартный вывод. cat file совпадает с cat file >&1.

Почему вы делаете exit 1 для нормального выхода. Я должен быть exit 0.

...