我有以下情况:- 我bbb
在 Windows 2003 中编写了一个批处理文件,并设置了返回值 = 3,然后exit /b 3
我通过此命令从 Unix 执行此批处理文件:-ssh -l admin host 'cmd /c start bbb'
但是当我打印返回值时,我得到的是 ( 0 ) 而不是 ( 3 )。我通过 打印此值echo $?
。现在,如何从 Windows 批处理中获取返回值“退出代码”?
答案1
您不能同时使用 bash 和 batch 的相同代码。
我的猜测是脚本遵循一个条件,例如:
if WINDOWS
exit /b 3
else
exit 3
这都是伪代码,我不确定什么对这两个系统都有效。
编辑: 或者您可以选择更简单的方法,编写两个完全不同的脚本文件; 作业脚本和工作网。
答案2
我对此很感兴趣,所以我做了一些研究。我认为使用该start
命令会给您带来问题 - start 会导致命令在另一个 shell 中运行。当您exit /b 3
将返回值传递给由其运行的 shell时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 返回给 $?。
注意:上面的命令中使用/
而不是。\
我的测试环境是 Windows Vista 上的 copssh 3.1.4,但我希望它在您的 2k3 环境中也能正常工作。
答案3
我认为发生的事情是您的命令返回的是 ssh 本身的退出代码,而不是 ssh 正在执行的命令。我可能错了,但我认为没有办法让 ssh 传递它远程执行的任何内容的返回代码。
如果出现问题,您可能需要让“bbb”bash 文件回显一些文本,然后收集并检查该文本。