Bash 运行ssh远程命令和grep获取字符串

Bash 运行ssh远程命令和grep获取字符串,bash,shell,ssh,grep,Bash,Shell,Ssh,Grep,我想编写脚本,远程运行一些ssh远程命令。我所需要的只是将已执行命令的输出grep为某个特殊字符串,这将意味着该命令已成功执行。例如,当我运行此命令时: ssh user@host "sudo /etc/init.d/haproxy stop" 我得到输出: Stopping haproxy: [ OK ] 我所需要的就是找到“OK”字符串,以确保命令成功执行。如何执行此操作?添加grep并检查退出状态: ssh user@host "sudo /etc/init.d/haproxy s

我想编写脚本,远程运行一些ssh远程命令。我所需要的只是将已执行命令的输出grep为某个特殊字符串,这将意味着该命令已成功执行。例如,当我运行此命令时:

ssh user@host "sudo /etc/init.d/haproxy stop"
我得到输出:

Stopping haproxy: [  OK  ]

我所需要的就是找到“OK”字符串,以确保命令成功执行。如何执行此操作?

添加
grep
并检查退出状态:

ssh user@host "sudo /etc/init.d/haproxy stop | grep -Fq '[  OK  ]'"
if [ "$#" -eq 0 ]; then
    echo "Command ran successfully."
else
    echo "Command failed."
fi
command && { echo "Command ran successfully."; }
command || { echo "Command failed."; }
if command; then echo "Command ran successfully."; else echo "Command failed."; fi
您也可以将
grep
放置在外部

ssh user@host "sudo /etc/init.d/haproxy stop" | grep -Fq '[  OK  ]'
检查退出状态的其他方法:

ssh user@host "sudo /etc/init.d/haproxy stop | grep -Fq '[  OK  ]'"
if [ "$#" -eq 0 ]; then
    echo "Command ran successfully."
else
    echo "Command failed."
fi
command && { echo "Command ran successfully."; }
command || { echo "Command failed."; }
if command; then echo "Command ran successfully."; else echo "Command failed."; fi
您还可以捕获输出并将其与
案例
[[]]
进行比较:

OUTPUT=$(exec ssh user@host "sudo /etc/init.d/haproxy stop")
case "$OUTPUT" in
*'[  OK  ]'*)
    echo "Command ran successfully."
    ;;
*)
    echo "Command failed."
esac

if [[ $OUTPUT == *'[  OK  ]'* ]]; then
    echo "Command ran successfully."
else
    echo "Command failed."
fi
您可以嵌入
$(exec sshuser@host“sudo/etc/init.d/haproxy-stop”)
直接作为表达式,而不是根据需要将输出传递给变量

如果
/etc/init.d/haproxy stop
将消息发送到stderr,只需将其重定向到stdout即可捕获:

sudo /etc/init.d/haproxy stop 2>&1