Я реализовал в оболочке POSIX (не bash) следующее:
fail.sh:
#!/bin/sh
echo something useful
echo warning 1 >&2
echo warning 2 >&2
echo an error message >&2
exit 100
Команда выводит то, что я хочу использовать на stdout, некоторые предупреждения на stderr и сообщение об ошибке на stderr, прежде чем сбой с кодом выхода 100.
success.sh:
#!/bin/sh
echo something useful
echo warning 1 >&2
echo warning 2 >&2
exit 0
Эта команда выводит что-то в stdout и некоторые предупреждения в stderr, но успешно завершается с кодом выхода 0.
test.sh:
#!/bin/sh -e
script=$1
rm -f success
msg=$({ $script > useful; touch success; } 2>&1 | tail -1;)
if [ -f success ]; then
echo success
else
echo failure
echo last error was: $msg
fi
В этом сценарии я хочу запустить любой из этих двух сценариев и предоставить следующие функции:
- вывод скриптов должен быть перенаправлен в файл
- последняя строка stderr должна быть сохранена в переменной, чтобы я мог распечатать эту последнюю строку позже, если команда не завершилась успешно
- Я хочу определить, успешно ли завершилась команда, проверив ее статус выхода.
Мой скрипт test.sh достигает всего этого, но использует внешний файл. Поскольку я использую -e
, touch
будет выполняться только в том случае, если $script
выполнено успешно. Могу ли я записать код выхода $script
без этой техники?
Сценарий должен быть написан в оболочке POSIX и должен использовать -e
.
-e
? Это соревнование по программированию или домашнее задание? - person Barmar   schedule 24.05.2013-e
- person josch   schedule 24.05.2013