usando los comandos watch run 2

42

Tengo que mirar dos comandos en la misma ventana de terminal. Me refiero a algo como

watch du -h filename.txt && df -h

Pero solo muestra una salida.

Entonces, lo que estoy pensando es que es posible que no sea posible usar watch para ejecutar múltiples comandos en la misma ventana.

Si hay alguna forma, hágamelo saber.

Gracias.

rɑːdʒɑ
fuente

Respuestas:

67

Puedes citar los comandos:

watch "du -h filename.txt && df -h"

Y serán ejecutados juntos.

Oli
fuente
Gracias Oli en realidad PC de oficina, así que no me atrevo a hacer experimentos. así publicado aquí para una solución segura. Gracias.
rɑːdʒɑ
Oye, ¿estás seguro de que funcionarán? porque cuando ejecuto obtengo un error de permiso denegado "df:` / usr / raja / hostctrl / new ': Permiso denegado "
rɑːdʒɑ
Ese parece ser un tema aparte. Verías ese problema incluso sin estar envuelto en el reloj.
Oli
3
Tenga en cuenta que esto funciona porque esos comandos de ejemplo regresan con verdadero . Si el primer comando devuelve falso, el segundo comando no se ejecutará (debido a boolean evaluation shortcut)
karatedog
3
FTR, mi comando usa &&porque el OP usa &&. La combinación de comandos y su vinculación es incidental a la respuesta.
Oli
19

Si desea asegurarse de que ambos comandos se ejecuten, una de las formas es separarlos en ;lugar de &&.

watch 'du -h filename.txt; df -h'

&&permite la ejecución del segundo comando (segundo operando, a la derecha de &&) solo si el primer comando se ejecutó correctamente (estado de salida 0). Si este es el comportamiento previsto, vaya con &&.

Pranav Kulkarni
fuente
1
Esta forma de punto y coma me parece mejor como respuesta a la pregunta original. Si quiere "ejecutar dos comandos", ¡use un punto y coma! Si quiere "ejecutar un comando, entonces quizás otro" use && ....
JeremyDouglass
3

Por completo ...

 watch 'du -h filename.txt || true && df -h'

El '|| true 'hace que el primer comando se evalúe como verdadero incluso si falla por alguna razón. Esto permitirá que el siguiente comando después de && se ejecute sin importar la salida de first. Es muy probable que esto sea innecesario para el escenario, solo muestra que es posible.

Geofferey
fuente
-1

Para que varios comandos se ejecuten simultáneamente, use un solo &operador entre los comandos. Me gusta:

dothis & dothat

Para aclarar cualquier confusión, así es como funcionan los diferentes operadores:

c1 & c2  # Run both commands parallelly
c1 ; c2  # Run both commands one by one
c1 && c2 # Run c2 only if c1 exits successfully
c1 || c2 # Run c2 only if c1 fails
Vibhum Bhardwaj
fuente
c1 y c2 no ejecutarán ambos comandos en paralelo, si c1 se ejecuta correctamente, solo se ejecutará c2.
rɑːdʒɑ