когда мы запускаем это на удаленной машине, мы получаем
ssh $IP "systemctl disable iptables.service"
и стандартная ошибка
echo $?
0
но давай запускаем с ошибкой (добавляю неверный синтаксис)
например
ssh $IP "systemctl disable_bug iptables.service"
почему мы получаем 0 из стандартной ошибки? несмотря на то, что команда не работает !!!
echo $?
0
Вы повторяете результаты команды ssh, которая оба раза успешно завершилась (т.е. ssh был в порядке). Вы не отображаете результаты команды, запущенной через ssh.
Если вы направите вывод команды в файл (через tee или обычное перенаправление), вы сможете собрать результаты позже.
Из-за отрицательных голосов (я полагаю, что OP, который не понимает, что то, что я уже ответил, правильно (см. Комментарии)), я расширяю этот ответ.
Когда ты бежишь echo $?
, он выведет код выхода последнего запуска местный команда. Например:
$ ssh user@host 'ls /tmp'
lastSubredditNeighborsRun.log
meetupDumper.log
mongodb-27017.sock
$ echo $?
0
Это код возврата ssh - НЕ код возврата ls
работать удаленно.
Бег echo $?
также может ничего не отображать:
$ ssh user@host 'ls /tp' && echo $?
ls: cannot access /tp: No such file or directory
Или он может отображать код возврата ошибки - если вы не запустите его в командной строке:
$ ssh user@host 'ls /tp'
ls: cannot access /tp: No such file or directory
$ echo $?
2
ssh может отправить обратно код ошибки отправленной команды - он должен - как собственный код ошибки ... но это не всегда.
Но бег echo $?
является всегда только сможет отобразить код ошибки последней запущенной местный команда. Если ssh возвращает удаленный код ошибки как свой собственный, это прекрасно. Но если это не так (или удаленная команда не отправляет код ошибки), вы получите ожидаемый результат от echo $?
- который 0
если предыдущая команда выполнена успешно.