Discussion:
Pasar o recoger salida de comandos a variables.
(demasiado antiguo para responder)
Ramses
2020-05-10 08:10:02 UTC
Permalink
Buenos días,

Cuando he necesito recoger la salida de un comando para después tratarla, lo he hago siempre así:

# PRUEBA=$(ls -la)

No me muestra la salida por Consola pero con un "echo $PRUEBA" imprimo el contenido.

Pero me he he encontrado con una curiosidad con NetCat.

Si hago un:

# PRUEBA=$(nc -z -v -w5 80.80.80.80 22)

Me muestra la salida por Consola y si hago un "echo $PRUEBA" me muestra la variable vacía.

¿Sabe alguien por qué ocurre esto con NetCat y cómo tendría que hacerlo para recoger la salida en una variable?


Saludos y gracias,

Ramsés
Ramses
2020-05-10 09:40:01 UTC
Permalink
Post by Ramses
Buenos días,
Cuando he necesito recoger la salida de un comando para después
# PRUEBA=$(ls -la)
No me muestra la salida por Consola pero con un "echo $PRUEBA" imprimo el contenido.
Pero me he he encontrado con una curiosidad con NetCat.
# PRUEBA=$(nc -z -v -w5 80.80.80.80 22)
Me muestra la salida por Consola y si hago un "echo $PRUEBA" me muestra la variable vacía.
¿Sabe alguien por qué ocurre esto con NetCat y cómo tendría que hacerlo
para recoger la salida en una variable?
Saludos y gracias,
Ramsés
Buenas, me respondo yo mismo.

Se ve que NetCat está sacando la salida por STDERR en vez de por STDOUT, por lo que se puede solucionar así:

# PRUEBA=$(nc -z -v -w5 80.80.80.80 22 2 >&1)


Saludos,

Ramsés
Daniel Cialdella Converti
2020-05-10 22:00:02 UTC
Permalink
Quizás les sirva.
Dejo los links. Disculpen los errores cometidos, estoy todavía aprendiendo
como hacer estos videos.


Intro


Uso diario de Xubuntu

UNSUSCRIBE
Obtener Outlook para Android <https://aka.ms/ghei36>
------------------------------
*Sent:* Sunday, May 10, 2020 11:33:36 AM
*Subject:* Re: [SOLUCIONADO] Pasar o recoger salida de comandos a
variables.
Buenos días,
Cuando he necesito recoger la salida de un comando para después
# PRUEBA=$(ls -la)
No me muestra la salida por Consola pero con un "echo $PRUEBA" imprimo el contenido.
Pero me he he encontrado con una curiosidad con NetCat.
# PRUEBA=$(nc -z -v -w5 80.80.80.80 22)
Me muestra la salida por Consola y si hago un "echo $PRUEBA" me muestra
la variable vacía.
¿Sabe alguien por qué ocurre esto con NetCat y cómo tendría que hacerlo
para recoger la salida en una variable?
Saludos y gracias,
Ramsés
Buenas, me respondo yo mismo.
Se ve que NetCat está sacando la salida por STDERR en vez de por STDOUT,
# PRUEBA=$(nc -z -v -w5 80.80.80.80 22 2 >&1)
Saludos,
Ramsés
--
\\- -//
( @ @ )
????????????oOOo-(_)-oOOo?????????????????
? ?
? From my TI 99 4/a - a bit delayed ?
? During delivery no animals harmed ?
? ?
? Linkedin / URL / DEBIAN / BLOG ?
? ?
? https://www.youtube.com/user/dcialdella
? https://es.linkedin.com/in/dcialdella
<http://es.linkedin.com/in/dcialdella> ?
? https://dockertips.com <https://www.debian.org/consultants/#ES>
?
? https://itprofesionales.blogspot.com <http://itprofesionales.blogspot.com> ?
? https://www.debian.org/consultants/#ES ?
? ?
????????????oOOo-(_)-oOOo?????????????????
??????????????oOoOoOoOo???????????????????
Changed 2017-07.
Camaleón
2020-05-10 09:50:01 UTC
Permalink
Post by Ramses
Buenos días,
# PRUEBA=$(ls -la)
No me muestra la salida por Consola pero con un "echo $PRUEBA" imprimo el contenido.
Pero me he he encontrado con una curiosidad con NetCat.
# PRUEBA=$(nc -z -v -w5 80.80.80.80 22)
Me muestra la salida por Consola y si hago un "echo $PRUEBA" me muestra la variable vacía.
¿Sabe alguien por qué ocurre esto con NetCat y cómo tendría que hacerlo para recoger la salida en una variable?
Ni idea... ¡esto es linux avanzado! :-P

La explicación la tienes aquí:

****
passing output of a netcat command to a variable or piping through read
utility
<https://stackoverflow.com/questions/55889713/passing-output-of-a-netcat-command-to-a-variable-or-piping-through-read-utility>
****

Y ciertamente, enviar a la salida estándar funciona:

***@stt008:~$ PRUEBA=$(nc -z -v -w5 80.80.80.80 22 2>&1); echo $PRUEBA
80.80.80.80: inverse host lookup failed: Unknown host (UNKNOWN) [80.80.80.80] 22 (ssh) : Connection timed out

***@stt008:~$ PRUEBA=$(nc -z -v -w5 80.80.80.80 22 2>&1); echo $PRUEBA > Escritorio/prueba.txt
***@stt008:~$ cat Escritorio/prueba.txt
80.80.80.80: inverse host lookup failed: Unknown host (UNKNOWN) [80.80.80.80] 22 (ssh) : Connection timed out

Saludos,
--
Camaleón
Ramses
2020-05-10 10:00:01 UTC
Permalink
Post by Ramses
Post by Ramses
Buenos días,
Cuando he necesito recoger la salida de un comando para después
# PRUEBA=$(ls -la)
No me muestra la salida por Consola pero con un "echo $PRUEBA"
imprimo el contenido.
Post by Ramses
Pero me he he encontrado con una curiosidad con NetCat.
# PRUEBA=$(nc -z -v -w5 80.80.80.80 22)
Me muestra la salida por Consola y si hago un "echo $PRUEBA" me
muestra la variable vacía.
Post by Ramses
¿Sabe alguien por qué ocurre esto con NetCat y cómo tendría que
hacerlo para recoger la salida en una variable?
Ni idea... ¡esto es linux avanzado! :-P
****
passing output of a netcat command to a variable or piping through read
utility
<https://stackoverflow.com/questions/55889713/passing-output-of-a-netcat-command-to-a-variable-or-piping-through-read-utility>
****
80.80.80.80: inverse host lookup failed: Unknown host (UNKNOWN)
[80.80.80.80] 22 (ssh) : Connection timed out
Post by Ramses
Escritorio/prueba.txt
80.80.80.80: inverse host lookup failed: Unknown host (UNKNOWN)
[80.80.80.80] 22 (ssh) : Connection timed out
Saludos,
Sí, sí, ya había encontrado esa solución.

Nos hemos cruzado el correo por el camino...


Gracias,

Ramsés
Loading...