在Unix中获取bat文件的返回值?

我有以下情况: – 我在Windows 2003中编写了一个batch filebbb ,并通过exit /b 3将返回值设置为3,然后使用此命令从Unix执行此batch file: – ssh -l admin host 'cmd /c start bbb'但是当我打印返回值时,我得到(0)没有(3)。 我用echo $?打印这个值 。 现在我怎样才能从Windows批处理返回值“退出代码”?

你不能同时使用bash和batch的确切代码。

我的猜测是脚本会遵循一个条件,如下所示:

 if WINDOWS exit /b 3 else exit 3 

这都是伪代码,我不知道两个系统都适用。

编辑:或者你可以走容易的路线,写出两个完全不同的脚本文件; job.batjob.sh。

我对此很感兴趣,所以我做了一些研究。 我认为使用start命令会导致你的问题 – 启动导致命令运行在另一个shell。 当你exit /b 3 ,返回值被传递给由cmd /c运行的shell,当它退出时,你得到一个0返回给你的ssh ,因此$? 是0。

我在c:\ temp \ b.bat中创build了一个简单的batch file

 @echo off exit /b 3 

像这样运行batch file

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

返回3到$? 按要求。

注意:在上面的命令中使用/而不是\

我的testing环境是Windows Vista上的copssh 3.1.4,但是我希望它能在2k3环境下工作。

我认为正在发生的事情是你的命令是从ssh本身返回退出代码,而不是执行命令ssh。 我可能是错的,但我不认为有一种方法可以使ssh通过远程执行的任何返回代码。

如果出现错误,您可能需要使“bbb”bash文件回显一些文本,然后收集并检查该文本。