Может ли кто-нибудь объяснить эту альтернативу try/catch в bash?

Итак, я узнал, что bash не обрабатывает исключения (нет try/catch). Для моего script я хотел бы знать, была ли команда успешной или нет.

Это часть моего кода прямо сейчас:

command = "scp -p$port $user:[email protected]$host:$from $to"
$command 2>/dev/null

if (( $? == 0 )); then
    echo 'command was successful'
else
    echo 'damn, there was an error'
fi

То, что я не понимаю, это:

  • строка 3, почему мне нужно поставить 2 за $command?
  • строка 5, что именно с этим $?

Ответ 1

$? означает код возврата последней выполненной команды.

2> означает перенаправление вывода stderr (стандартный поток ошибок) на /dev/null.

Ответ 2

Просто FYI, это также будет работать:

if some_command 2>/dev/null ; then
    echo 'command was successful'
else
    echo 'damn, there was an error'
fi