Estoy tratando de entender lo que grep -v grep
hace a continuación:
ssh $server -p $port -o "ConnectTimeout 5" | grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l
¿O hay una mejor manera de encontrar la prueba de conexión TCP?
Comentarios
Responder
Excluye todas las líneas que contienen la secuencia de letras grep
de la salida de tubería anterior.
Respuesta
Si desea verificar que puede establecer una conexión ssh en 5 segundos y ejecutar un comando, simplemente haga:
if ssh -o BatchMode=yes -o ConnectTimeout=5 -p "$port" "$server" true; then printf "%s\n" "$server is up" fi
Su comando tal como está tiene poco sentido. Como no proporciona un comando para que se ejecute en el servidor remoto, ssh
se ejecutará en el rlogin
modo, donde se solicita un pseudo-terminal y se inicia el shell de inicio de sesión del usuario remoto (o posiblemente un ForcedCommand).
Luego, está aplicando varios filtros a la salida:
-
grep -v "Connection refused"
: filtre cualquier línea de la salida que contieneConnection refused
. Eso tiene poco sentido, ya que el mensaje de error, si apareciera, estaría escrito en stderr, no en la salida estándar quegrep
está filtrando, y también porque: -
grep "Connected to"
: seleccione solo las líneas que contienenConnected to
. Eso también excluiría las líneas que contienenConnection refused
, ya que es poco probable que una línea contenga ambos. -
grep -v grep
, también elimine las líneas que contienengrep
(por lo que serían líneas que contienen tantoConnected to
ygrep
y noConnection refused
!) -
wc -l
: cuente el número de líneas resultantes (entonces las líneas enssh
«s stdout que contienenConnected to
excepto aquellos que también contienengrep
oConnection refused
). Tenga en cuenta quewc
solo generará ese número cuando se cierre la conexión, cuando la sesión de shell haya finalizado, como cuando el usuario ingresaexit
. Pero, de nuevo, dado que el usuario «no verá ningún resultado (ya que todo va awc
eventualmente), el usuario tendrá poca idea de que necesita ingresarexit
para terminar esa sesión.
man grep