首页 > 解决方案 > 如何在 shell 脚本中捕获本地和远程 shell 变量

问题描述

我正在尝试使用 ssh 在远程主机上执行命令。在这里,我需要在该远程主机上捕获该远程命令的退出代码,同时我需要捕获我的 ssh 命令的退出代码。如何从同一命令中捕获本地和远程 shell 变量?

基本上要求是:

ssh user@remotehost "/etc/stop_database; echo $?"

根据我的 ssh 命令的返回码,我需要执行一些操作。

if [ $? -ne 0 ]; then
echo ssh failed
else
echo ssh success
fi

同样基于该主机中远程命令的退出代码,我需要执行以下操作:

if database_stopped; then
echo DB stopped successfully
else
echo Unable to stop DB
fi

标签: shell

解决方案


如果 stop_database 不产生任何输出或被重定向,则echo $?可以将远程捕获到脚本 var 并访问 ssh 退出代码;在此模拟示例中,"ssh yadda ..."替换为本地内容:

#!/bin/bash

rmt_sd=$(echo 23; exit 46)
ssh_ec=$?

echo rmt_sd $rmt_sd, ssh_ec $ssh_ec

推荐阅读