Obtém o valor de retorno do arquivo bat no Windows no Unix?

2

Eu tenho o seguinte caso: Eu escrevo um arquivo de lote bbb no Windows 2003 e coloco um valor de retorno = 3 por exit /b 3 então eu executo este arquivo de lote do Unix com este comando: - ssh -l admin host 'cmd /c start bbb' mas quando imprimo o valor de retorno eu recebo (0) não (3). Eu imprimo este valor por echo $? . Agora, como posso obter um valor de retorno "código de saída" do lote do Windows?

    
por Mohammad AL-Rawabdeh 03.10.2010 / 11:27

3 respostas

3

Você não pode usar o código exato para o bash e o lote ao mesmo tempo.

Meu palpite seria que o roteiro segue um condicional, algo como:

if WINDOWS
  exit /b 3
else
  exit 3

Isso é tudo pseudocódigo, não sei o que funciona para os dois sistemas.

Editar: Ou você poderia seguir a rota mais fácil e escrever dois arquivos de script completamente diferentes; job.bat e job.sh .

    
por 03.10.2010 / 14:21
3

Fiquei intrigado com isso, então fiz um pouco de pesquisa. Eu acho que usar o comando start está causando problemas - start faz com que o comando seja executado em outro shell. Quando você exit /b 3 o valor de retorno é passado para o shell que é executado por cmd /c e quando ele sai, você recebe apenas um 0 retornado para seu ssh e, portanto, $? é 0.

Eu criei um arquivo de lote simples em c: \ temp \ b.bat

@echo off
exit /b 3 

executando o arquivo em lote como este

ssh -l admin host 'cmd /c c:/temp/b.bat'

retornou 3 para $? conforme necessário.

Nota: o uso de / em vez de \ no comando acima.

Meu ambiente de teste foi o copssh 3.1.4 no Windows Vista, mas eu esperaria que ele funcionasse da mesma forma no seu ambiente 2k3.

    
por 03.10.2010 / 23:20
1

Eu acho que o que está acontecendo é que seu comando está retornando o código de saída do próprio ssh, e não o comando ssh está sendo executado. Eu posso estar errado, mas eu não acho que haja uma maneira de fazer o ssh passar pelo código de retorno de qualquer coisa que ele execute remotamente.

Você provavelmente precisará fazer com que seu arquivo bash "bbb" ecoe algum texto se algo der errado, e então coletar e verificar o texto.

    
por 03.10.2010 / 14:41