You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

远程SSH执行脚本:grep匹配失败时无返回值输出问题咨询

问题分析与解决方案

让我帮你拆解下问题——你的脚本确实存在语法问题,这就是为什么vhost不存在时没有输出的核心原因。

问题根源

你写的命令行没有用分号或换行来分隔独立的命令,导致远程Shell无法正确解析你要执行的三个操作:

(sudo rabbitmqctl list_vhosts -q | grep $RABBITMQ_BATCH_VHOST ) RESULT=$? echo $RESULT

这段代码会被Shell误解为:运行子shell (sudo ...),然后把RESULT=$?和echo $RESULT当成这个子shell命令的参数,完全偏离了你原本的逻辑。

当vhost存在时,grep会输出匹配内容,子shell正常退出,可能此时Shell的错误处理机制让echo偶然执行了;但当vhost不存在时,grep返回非0状态,加上语法错误,整个命令执行失败,自然没有任何输出。

修正后的写法

方式1:直接在SSH命令中修正语法

用分号分隔命令,并且用单引号包裹整个远程命令(避免本地Shell提前展开变量):

ssh your_remote_host 'sudo rabbitmqctl list_vhosts -q | grep "$RABBITMQ_BATCH_VHOST"; RESULT=$?; echo $RESULT'

方式2:写成独立脚本执行

如果是上传脚本到远程主机后执行,脚本内容应该是:

#!/bin/bash
# 检查vhost是否存在并输出状态码
sudo rabbitmqctl list_vhosts -q | grep "$RABBITMQ_BATCH_VHOST"
RESULT=$?
echo $RESULT

然后通过SSH执行:

ssh your_remote_host 'bash /path/to/your/check_vhost.sh'

简化版逻辑

其实你可以省略中间变量RESULT,直接输出grep的退出状态,用-q参数让grep静默运行(只返回状态不输出匹配内容):

ssh your_remote_host 'sudo rabbitmqctl list_vhosts -q | grep -q "$RABBITMQ_BATCH_VHOST"; echo $?'

这样更简洁,输出的0表示vhost存在,非0值表示不存在。

内容的提问来源于stack exchange,提问作者Zaks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:16:01