bash - Running ssh remote command and grep for a string -
i want write script remotely run ssh remote commands. need grep output of executed command special string mean command executed successfully. example when run this:
ssh user@host "sudo /etc/init.d/haproxy stop"
i output:
stopping haproxy: [ ok ]
all need find "ok" string ensure command executed successfully. how can this?
add grep
, check exit status:
ssh user@host "sudo /etc/init.d/haproxy stop | grep -fq '[ ok ]'" if [ "$#" -eq 0 ]; echo "command ran successfully." else echo "command failed." fi
you may place grep
outside.
ssh user@host "sudo /etc/init.d/haproxy stop" | grep -fq '[ ok ]'
other ways check exit status:
command && { echo "command ran successfully."; } command || { echo "command failed."; } if command; echo "command ran successfully."; else echo "command failed."; fi
you can capture output , compare case
or [[ ]]
:
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 ]'* ]]; echo "command ran successfully." else echo "command failed." fi
and can embed $(exec ssh user@host "sudo /etc/init.d/haproxy stop")
directly expression instead of passing output variable if wanted.
if /etc/init.d/haproxy stop
sends messages stderr instead, redirect stdout can capture it:
sudo /etc/init.d/haproxy stop 2>&1
Comments
Post a Comment