我有以下情况: – 我在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.bat和job.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文件回显一些文本,然后收集并检查该文本。