在 DOS 批处理脚本中,我使用 plink 在远程(也是 Windows)计算机上运行单个命令。以前,该命令只在本地机器上运行,并依靠返回码来确定成功。有没有办法通过 plink 轻松获取这些信息?
2 回答
这是不可能的plink
。目前的共识是将远程脚本echo
的退出代码写入日志文件,然后用于pscp
将日志文件传输到本地机器。
请参阅http://fixunix.com/ssh/74235-errorlevel-capturing-plink.html。
与 plink 0.66
C:\Code>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" bob@myserver exit 42
C:\Code>echo %ERRORLEVEL%
42
同样对于@John Wiersba 对何时无法建立连接的担忧,这似乎已修复
C:\CodeMisc>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" bob@garbageservername exit 42
Unable to open connection:
Host does not exist
C:\Code>echo %ERRORLEVEL%
1
还要注意...的管道echo Y
...这使您能够自动接受服务器指纹(至少可以说有点危险...但是我们的登录服务器是负载平衡的,所以您总是得到不同的指纹:()
然而,正如@LeonBloy 所指出的,plink 仍然有一些返回零退出代码的连接条件。如果您知道退出代码范围并且没有通过文件与 Windows 进行通信的好方法。您可以对退出代码 +3(如果您知道退出代码永远不会 == 253-255),也可以应用按位 OR(我建议exit $(($?|128))
- 在 bash 中)。
Or if you don't care about the exact exit code, you could return 2 for success, and zero for failure. Thus a non-two exit code would indicate failure. In bash this would be: echo $((($?==0) << 1))
. This would be by far the most robust general purpose solution, but you should make sure your exit code is logged for debug-ability.