Вернуть код из сценария оболочки, запущенного из PuTTY, в вызывающий пакетный файл?

Я хотел бы задать вопрос о том, как применять PuTTY и контролировать его возвращаемые значения. Моя установка такая.

Там есть файл xxxxx.bat, который содержит вызов PuTTY с ssh-соединением, например:

putty.ext ssh 10.10.10.10 -l xxxx -pw yyyy -t -m wintest.txt

Файл wintest.txt содержит:

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

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

echo "wintest.txt: After execute..."
echo $?

Файл lintest.bsh содержит различные команды, меня интересует возможность захватить возвращаемое значение определенной команды в файле .bsh и вызвать это значение из файла bat, чтобы добавить его в цикл if с предупреждением, т.е. if $? (или %ERRORLEVEL - не знаю, что подойдет) then BLABLA

Я прочитал много сообщений об этом, но, честно говоря, я впервые делаю что-либо с файлами .bat, поэтому все это немного запутанно.


person onlyf    schedule 06.11.2015    source источник


Ответы (1)


Во-первых, не используйте 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
)

Но, конечно, вы должны исправить свой скрипт, чтобы он возвращал код выхода, который вы хотите (текущий код возвращает код выхода предыдущей команды echo):

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

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

echo "wintest.txt: After execute..."
echo $EXIT_CODE
person Martin Prikryl    schedule 06.11.2015
comment
Спасибо, это было очень полезно - person onlyf; 06.11.2015