La 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.
[root@server ~]# cmd1 | cmd2
Con & hará que los dos (o más) comandos se ejecuten de manera simultanea.
[root@server ~]# cmd1 & cmd2
Con || El segundo comando se ejecutará si el primero termina sin éxito.
[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
Claro conciso y con estructura y letra que no despistan del tema.
Muchas gracias Diamiá, me alegro de que te haya servido, de eso se trata.
Un saludo
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.
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.
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
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!
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??
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.