История изменений
Исправление emulek, (текущая версия) :
Мне нужно не разделить выполнение по условию на две ветки, а детектировть наличие ошибки в цепочке из нескольких обязательных действий. Конструкция «a && b && ... && z || echo Ошибка!» делает именно это.
она не совсем это делает. Точнее это совсем НЕ конвейер. Конвейер это когда несколько работяг _одновременно_ выполняют одну и ту же _свою_ операцию. А вот && это _последовательное_ выполнение.
У вас вообще жопа:
a && b && (c && d && e) || f
1. запускается a
2. если a успешно, запускается b
3. если b успешно, запускается суб-процесс, в котором запускается c && d && e
4. если суб-процесс не успешен, запускается f
Короче, разбирайтесь сами, что у вас там происходит. Нормальные люди пишут так примерно
function foo()
{
command_a || return
command_b || return
…
command_z
}
foo
err=$?
if [ $err != 0 ]; then
echo "error #$err"
exit $err
fi
в этом коде foo() возвращает код ошибки, если она была.
Исходная версия emulek, :
Мне нужно не разделить выполнение по условию на две ветки, а детектировть наличие ошибки в цепочке из нескольких обязательных действий. Конструкция «a && b && ... && z || echo Ошибка!» делает именно это.
она не совсем это делает. Точнее это совсем НЕ конвейер. Конвейер это когда несколько работяг _одновременно_ выполняют одну и ту же _свою_ операцию. А вот && это _последовательное_ выполнение.
У вас вообще жопа:
a && b && (c && d && e) || f
1. запускается a
2. если a успешно, запускается b
3. если b успешно, запускается суб-процесс, в котором запускается c && d && e
4. если суб-процесс не успешен, запускается f
Короче, разбирайтесь сами, что у вас там происходит. Нормальные люди пишут так примерно
function foo()
{
command_a || return
command_b || return
…
command_z
}
foo
err=$?
if [ $err != 0 ]; then
echo "error #err"
exit $err
fi
в этом коде foo() возвращает код ошибки, если он был.