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.

Respuestas:


67

Puedes citar los comandos:

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

Y serán ejecutados juntos.


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 &&.


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.


-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

c1 y c2 no ejecutarán ambos comandos en paralelo, si c1 se ejecuta correctamente, solo se ejecutará c2.
rɑːdʒɑ
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.