Назад | Перейти на главную страницу

Получить возвращаемое значение файла bat в Windows в Unix?

У меня такой случай: - Пишу батник 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" отображать какой-то текст, если что-то пошло не так, а затем собрать и проверить этот текст.