У меня такой случай: - Пишу батник bbb
в Windows 2003 и поместите возвращаемое значение = 3 на exit /b 3
затем я выполняю этот командный файл из Unix с помощью этой команды: - ssh -l admin host 'cmd /c start bbb'
но когда я печатаю возвращаемое значение, я получаю (0), а не (3). Я печатаю это значение echo $?
. Как теперь получить возвращаемое значение «код выхода» из пакета Windows?
Я был заинтригован этим, поэтому провел небольшое исследование. Я думаю, что используя start
команда вызывает у вас проблемы - start вызывает выполнение команды в другой оболочке. Когда ты exit /b 3
возвращаемое значение передается в оболочку, которая запускается cmd /c
и когда он выходит, вы просто получаете 0
вернулся в ваш ssh
и поэтому $?
равно 0.
Я создал простой командный файл в c: \ temp \ b.bat
@echo off
exit /b 3
запуск командного файла, подобного этому
ssh -l admin host 'cmd /c c:/temp/b.bat'
вернул 3 $? как требуется.
Примечание: использование /
вместо того \
в команде выше.
Моей тестовой средой была copssh 3.1.4 в Windows Vista, но я ожидал, что она будет работать так же в вашей среде 2k3.
Вы не можете использовать точный код для bash и пакетной обработки одновременно.
Я предполагаю, что сценарий следует условному, например:
if WINDOWS
exit /b 3
else
exit 3
Это все псевдокод, я не уверен, что работает для обеих систем.
Редактировать: Или вы можете пойти более легким путем и написать два совершенно разных файла сценария; job.bat и job.sh.
Я думаю, что происходит то, что ваша команда возвращает код выхода из самого ssh, а не команду, которую выполняет ssh. Я могу ошибаться, но я не думаю, что есть способ заставить ssh передавать код возврата всего, что он выполняет удаленно.
Вам, вероятно, нужно заставить ваш bbb-файл "bbb" отображать какой-то текст, если что-то пошло не так, а затем собрать и проверить этот текст.