Quiero escribir una función "para siempre" en la que pueda ejecutar varios comandos hasta que la elimine manualmente con Ctrl-C. Básicamente, desde la línea de comando zsh, sé que puedo hacer esto, y esto funciona bien:
$ while {} { ls ; sleep 1 }
que repetirá la llamada ls
y sleep 1
, para siempre.
No puedo entender una sintaxis para convertir algo así en una función. Algo como:
forever() { while {} { "${@}" } }
que luego quiero llamar con algo como:
$ forever ( ls ; sleep 1 )
Probablemente parece tonto cuando while {} {<commands>}
y forever {<commands>}
apenas es muy diferente. Pero lo que realmente quiero como objetivo final es una función de "sueño para siempre", donde puedo decir algo como
$ forever-sleep 5 ls -l
$ forever-sleep 5 ( ls -l a ; ls -l b )
y dormirá $1
segundos después de ejecutar los comandos que le doy, para siempre (hasta que lo mate manualmente con Ctrl-C).
(He intentado un montón de combinaciones y de los agrupamientos ()
, (())
, {}
, []
, [[]]
, ""
, ''
, y tal, y yo simplemente no puedo encontrar la manera de conseguir tanto la función como la línea de comandos no tienen errores de sintaxis, analizar Errrors, etc. )
Entonces,
- ¿Hay algo similar a esta idea "para siempre" ya?
- ¿Es esto posible en una función? (Preferiría una función que pueda incluir en mi en
.zshrc
lugar de tener un script de shell ejecutable separado).
eval
es lo que me faltaba. (Que sabía sobreshift
, pero gracias por la integridad.)