Если вы хотите работать с $ ?, вам нужно проверять его после каждой команды, так как $? обновляется после выхода каждой команды. Это означает, что если вы выполните конвейер, вы получите только код завершения последнего процесса в конвейере.
Другой подход заключается в том, чтобы сделать это:
set -e
set -o pipefail
Если вы поместите это наверху сценария оболочки, похоже, bash позаботится об этом за вас. Как отмечалось в предыдущем постере, "set -e" приведет к выходу bash с ошибкой в любой простой команде. «set -o pipefail» приведет к выходу bash с ошибкой и для любой команды в конвейере.
См. здесь или здесь для более подробного обсуждения этой проблемы. Здесь - раздел руководства по bash для встроенного набора.
Вы не зря теряете время. Это очень хорошая практика. Когда вы разделяете IIS и SQL на разных машинах, есть несколько вариантов:
Если два сервера не находятся в одном домене Windows, вы не можете использовать доверенное соединение.
Кроме того, логин должен быть создан как аутентификация Windows, вы не можете использовать SQL авторизация авторизации с доверенным соединением.
В остальном все, что сказал Тапори.