从 PuTTY 运行的 shell 脚本返回代码以调用批处理文件?

onl*_*lyf 6 bash putty batch-file exit-code

我想问一个关于如何应用PuTTY并控制其返回值的问题。我的设置是这样的。

有一个xxxxx.bat文件包含 PuTTY 调用和 ssh 连接,例如:

putty.ext ssh 10.10.10.10 -l xxxx -pw yyyy -t -m wintest.txt
Run Code Online (Sandbox Code Playgroud)

该文件wintest.txt包含:

echo "wintest.txt: Before execute..."

/home/tede/n55115/PD/winlinux/RUN.lintest.bsh

echo "wintest.txt: After execute..."
echo $?
Run Code Online (Sandbox Code Playgroud)

该文件lintest.bsh包含各种命令,我感兴趣的是能够捕获 .bsh 文件中特定命令的返回值,并从 bat 文件调用该值,将其添加到带有警告的 if 循环中,即if $?(或%ERRORLEVEL- 我不知道什么会起作用)thenBLABLA

我已经阅读了很多关于这个的帖子,但坦率地说,这是我第一次使用 .bat 文件做任何事情,所以它有点令人困惑。

Mar*_*ryl 4

首先,不要使用PuTTY进行自动化,使用Plink(PuTTY命令行连接工具)。

但即使是 Plink 也无法传播远程命令退出代码。

您可以让远程脚本在其输出的最后一行打印退出代码(您已经使用 执行的操作echo $?),并让批处理文件解析退出代码:

@echo off

plink.exe putty.ext ssh 10.10.10.10 -l xxxx -pw yyyy -t -m wintest.txt > output.txt 2>&1

for /F "delims=" %%a in (output.txt) do (
   echo %%a
   set "SHELL_EXIT_CODE=%%a"
)

if %SHELL_EXIT_CODE% gtr 0 (
   echo Error %SHELL_EXIT_CODE%
) else (
   echo Success
)
Run Code Online (Sandbox Code Playgroud)

但是,当然,您必须修复脚本以返回所需的退出代码(当前代码返回上一个echo命令的退出代码):

echo "wintest.txt: Before execute..."

/home/tede/n55115/PD/winlinux/RUN.lintest.bsh
EXIT_CODE=$?

echo "wintest.txt: After execute..."
echo $EXIT_CODE
Run Code Online (Sandbox Code Playgroud)