tag editar easytag linux bash ubuntu

editar - Repita el comando automáticamente en Linux



linux easytag (12)

"watch" no permite fracciones de segundo en Busybox, mientras que "sleep" sí lo hace. Si eso te importa, prueba esto:

while true; do ls -l; sleep .5; done

¿Es posible que en la línea de comandos de Linux se repita un comando cada n segundos?

Por ejemplo, digamos que tengo una importación en ejecución y estoy haciendo

ls -l

para comprobar el tamaño del archivo está aumentando. Me gustaría tener un comando para que esto se repita automáticamente.


Ejecutar comandos periódicamente sin cron es posible cuando vamos con while .

Como una orden:

while true ; do command ; sleep 100 ; done & [ ex: # while true; do echo `date` ; sleep 2 ; done & ]

Ejemplo:

while true do echo "Hello World" sleep 100 done &

No olvide lo último & como pondrá su bucle en el fondo. Pero necesita encontrar el id del proceso con el comando "ps -ef | grep your_script" y luego debe matarlo. Así que por favor agregue el ''&'' cuando ejecute el script.

# ./while_check.sh &

Aquí está el mismo bucle que un script. Crea el archivo "while_check.sh" y ponlo en él:

#!/bin/bash while true; do echo "Hello World" # Substitute this line for whatever command you want. sleep 100 done

Luego ejecútelo escribiendo bash ./while_check.sh &


El reloj es bueno pero limpiará la pantalla.

watch -n 1 ''ps aux | grep php''


Mira cada 5 segundos ...

watch -n 5 ls -l

Si desea tener una confirmación visual de los cambios, agregue --differences antes del comando ls .

Según la página de manual de OSX, también hay

La opción --cumulativa hace que el resaltado sea "pegajoso", presentando una visualización en ejecución de todas las posiciones que hayan cambiado. La opción -t o --no-título desactiva el encabezado que muestra el intervalo, el comando y la hora actual en la parte superior de la pantalla, así como la siguiente línea en blanco.

La página del manual de Linux / Unix se puede encontrar here


Para minimizar la deriva más fácilmente, use:

while :; do sleep 1m & some-command; wait; done

todavía habrá una pequeña cantidad de desviación debido al tiempo de bash para ejecutar la estructura de bucle y el comando de suspensión para ejecutar realmente.

pista: '':'' evals a 0 es cierto.


Puede ejecutar lo siguiente y filtrar solo el tamaño. Si su archivo fue llamado somefilename nombre de somefilename , puede hacer lo siguiente

while :; do ls -lh | awk ''/some*/{print $5}''; sleep 5; done

Una de las muchas ideas.


Si desea evitar el "desvío", lo que significa que desea que el comando se ejecute cada N segundos, independientemente de cuánto demore el comando (suponiendo que tome menos de N segundos), aquí hay algo de bash que repetirá un comando cada 5 segundos con uno. segunda precisión (e imprimirá una advertencia si no puede continuar):

PERIOD=5 while [ 1 ] do let lastup=`date +%s` # do command let diff=`date +%s`-$lastup if [ "$diff" -lt "$PERIOD" ] then sleep $(($PERIOD-$diff)) elif [ "$diff" -gt "$PERIOD" ] then echo "Command took longer than iteration period of $PERIOD seconds!" fi done

Todavía puede desviarse un poco, ya que el sueño solo es preciso en un segundo. Podría mejorar esta precisión mediante el uso creativo del comando date.


Si desea hacer algo un número específico de veces, siempre puede hacer esto:

repeat 300 do my first command here && sleep 1.5


Si el comando contiene algunos caracteres especiales, como canalizaciones y comillas, el comando debe rellenarse con comillas. Por ejemplo, para repetir ls -l | grep "txt" ls -l | grep "txt" , el comando watch debería ser:

watch -n 5 ''ls -l | grep "txt"''


sleep ya devuelve 0 . Como tal, estoy usando:

while sleep 3 ; do ls -l ; done

Esto es un poquito más corto que la solución de Mikhail. Un pequeño inconveniente es que duerme antes de ejecutar el comando de destino por primera vez.


watch -n 5 ''ls -l

Ejecutará el ls -l después de cada 5s

Salida: -

Every 5.0s: ls -l Fri Nov 17 16:28:25 2017 total 169548 -rw-rw-r-- 1 sachin sachin 4292 Oct 18 12:16 About_us_Admission.doc -rw-rw-r-- 1 sachin sachin 865 Oct 13 15:26 About_us_At_glance.doc -rw-rw-r-- 1 sachin sachin 1816 Oct 13 16:11 About_us_Principle.doc -rw-rw-r-- 1 sachin sachin 1775 Oct 13 15:59 About_us_Vission_mission.doc -rw-rw-r-- 1 sachin sachin 1970 Oct 13 16:41 Academic_Middle_school.doc -rw-rw-r-- 1 sachin sachin 772 Oct 16 16:07 academics_High_School.doc -rw-rw-r-- 1 sachin sachin 648 Oct 16 13:34 academics_pre_primary.doc -rw-rw-r-- 1 sachin sachin 708 Oct 16 13:39 academics_primary.doc -rwxrwxr-x 1 sachin sachin 8816 Nov 1 12:10 a.out -rw-rw-r-- 1 sachin sachin 23956 Oct 23 18:14 Ass1.c++ -rw-rw-r-- 1 sachin sachin 342 Oct 23 22:13 Ass2.doc drwxrwxr-x 2 sachin sachin 4096 Oct 19 10:45 Backtracking drwxrwxr-x 3 sachin sachin 4096 Sep 23 20:09 BeautifulSoup drwxrwxr-x 2 sachin sachin 4096 Nov 2 00:18 CL_1 drwxrwxr-x 2 sachin sachin 4096 Oct 23 20:16 Code drwxr-xr-x 2 sachin sachin 4096 Nov 15 12:05 Desktop -rw-rw-r-- 1 sachin sachin 0 Oct 13 23:12 doc drwxr-xr-x 4 sachin sachin 4096 Nov 6 21:18 Documents drwxr-xr-x 27 sachin sachin 12288 Nov 17 13:23 Downloads -rw-r--r-- 1 sachin sachin 8980 Sep 19 23:58 examples.desktop


while true; do sleep 5 ls -l done