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

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

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

相关内容