Concatenar Comandos en Linux y sus Variantes

imagesLa siguiente entrada es un ‘tip’ que me sirve personalmente como recordatorio, seguro que a más de uno le vendrá bien.

Aquí van las variantes a la hora de concatenar comandos en linux, algo muy básico pero que, como todo, si no se práctica se olvida.

 

Con | hace que la salida del primero se convierta en la entrada del segundo.

 Ejemplo:
[root@server ~]# cmd1 | cmd2

 

Con & hará que los dos (o más) comandos se ejecuten de manera simultanea.

 Ejemplo:
[root@server ~]# cmd1 & cmd2

 

Con || El segundo comando se ejecutará si el primero termina sin éxito.

 Ejemplo:
[root@server ~]# cmd1 || cmd2

 

Con && El segundo comando se ejecutará solo si el primero termina con éxito.

Ejemplo:

[root@server ~]# cmd1 && cmd2

 

Con ; El segundo comando se ejecutará sin importar el resultado del primero.

Ejemplo:

[root@server ~]# cmd1 ; cmd2

Autor: Jorge Bastida Cano

Programador de Software y Apasionado de las nuevas tecnologías.

8 opiniones en “Concatenar Comandos en Linux y sus Variantes”

  1. Una pregunta, los comandos deben estar en la misma línea o pueden estar en la siguiente línea?, Ej:
    comando_1 &&
    comando_2

    es lo mismo que comando_1 && comando_2 ??

    Gracias.

    1. Hola Carles, muchas gracias por tu comentario.

      ¿Cómo insertarías ese salto de línea?. Ten en cuenta que INTRO es = a EJECUTAR comando. Otra cosa es que quieras hacerlo en un script. Dime, ¿qué necesitas hacer?

      Saludos.

      1. Una pregunta que pena, si hago un script.sh en donde cada comando arroja la letra (Y) para confirmar,coo lo hago posible ? es decir que cada comando le da una opcion al usuario y hasta que no se ejecute dicha confirmación, no se ejecute todo — gracias y por cierto excelente pagina

        1. Gracias por el comentario.

          No sé si te he entendido bien, lo que quieres ¿es lo siguiente?

          «pregunta a usuario (yes or no)
          si respuesta si entonces lanzo comando 1
          si respuesta no entonces exit

          pregunta a usuario (yes or no)
          si respuesta si entonces lanzo comando 2
          si respuesta no entonces exit»

          ¿O bien lo que necesitas es esto?

          «pregunta a usuario (yes or no)
          si respuesta si entonces lanzo comando 1, 2…n
          si respuesta no entonces exit»

          Gracias!

  2. Hola tengo la siguiente consulta, tengo estos dos grep de ejemplo

    grep -n «parametro» *.txt > salida_1.txt & grep -n «parametro» *.csv > salida_2.txt

    echo «Cantidad De Lineas Salida_1: » $(cat salida_1.txt | wc -l)
    echo «Cantidad De Lineas Salida_2: » $(cat salida_2.txt | wc -l)

    Como los dos grep se estan ejecutando en 2do plano, el echo pasa a ejecutarse en ese momento y su resultado de $(cat salida_1.txt | wc -l) me da valor 0, esto sucede ya que los grep aun no finalizan, existe alguna manera de que se ejecuten los dos grep en segundo plano y finalizando con sus resultados recien se ejecute el echo con las salidas de los dos grep??

    1. Sí, puedes hacer que el script espere a que los dos comandos grep se completen antes de ejecutar el comando echo. Para hacer esto, puedes usar el comando wait, que espera a que todos los procesos secundarios terminen su ejecución.

      Aquí está el script modificado:


      grep -n "parametro" *.txt > salida_1.txt &
      grep -n "parametro" *.csv > salida_2.txt &

      wait

      echo "Cantidad De Lineas Salida_1: $(cat salida_1.txt | wc -l)"
      echo "Cantidad De Lineas Salida_2: $(cat salida_2.txt | wc -l)"

      En este script, los comandos grep se ejecutan en segundo plano, pero luego se utiliza el comando wait para esperar a que ambos comandos finalicen antes de ejecutar el comando echo. De esta manera, el resultado de $(cat salida_1.txt | wc -l) y $(cat salida_2.txt | wc -l) será el número correcto de líneas en cada archivo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.