Полностью согласен; отключение -e и повторное включение -некрасиво, и этого следует избегать.
Пара вариантов
if my_command; then
echo "my_command ran ok"
else
rc=$?
echo "my_command exited with error code $rc"
fi
Или, если вы хотите пойти по пути case (, и это немного хакерски, но он должен показывать возможности, а не использоваться ).
# PLEASE DO NOT ACTUALLY DO THIS
case "$(my_command > /dev/null && echo 0 || echo $?)" in
0) echo yeah ;;
11) echo "bummer" ;;
*) echo meh ;;
esac
Менее уродливым решением может быть (, если вы хотите использовать case)
my_command && rc=0 || rc=1
case "$rc" in
...
esac
В конце концов мне удалось восстановить данные с помощью TestDisk. Мне удалось восстановить большинство файлов и скопировать их на внешний жесткий диск.