Si ejecuta el watch
comando que contiene un alias, no expandirá el alias. He intentado con comillas simples y comillas dobles, de hecho, dado el siguiente alias:
# alias ll
alias ll='ls -l --color=tty'
El siguiente comando fallará
# watch ll
sh: ll: command not found
¿No debería funcionar la expansión de línea de comando en este caso?
watch
porque el alias debe ser la siguiente palabra, mientras quewatch
necesita sus argumentos antes de que se ejecute el comando. Si lo intentastewatch -n 10 <alias>
, bash no expandirá el alias. Para solucionarlo, necesita un alias que incluya las opciones que desee (por ejemplo, `alias watch-10 = 'watch -n 10'), aún con un espacio final.¿Quizás podríamos expandir manualmente el alias antes de que watch lo vea?
Explicación
La salida de se
alias ll
ve así:Entonces configuramos el delímetro de corte para que sea comilla simple, y cortamos el segundo campo, dejando:
es decir, el alias expandido. Eso luego forma los argumentos dados a
watch
.Haz una función para hacerlo
Entonces,
Funciona como se desee. Esto es horrible y fallará en todo tipo de situaciones. Lo siento.
fuente
Pensé que aquí el problema básico es que mientras se ejecuta
watch
, el argumento se da a "sh -c
", lo que significa que si el aliasll
no está definido en elsh(dash shell's)
entorno, no lo expandirá. Pero estaba equivocado y este no es el caso, la respuesta de Chris anterior es correcta.fuente
watch 'alias ll="ls -l --color=tty"; type ll; ll'
.sh -c
", su explicación también es aplicablesh
. Estoy en lo cierto?sh
. Nótese que esto hace el trabajo:sh -c $'alias ll="ls -l --color=tty"\ntype ll\nll'
Ejecuté
watch
un nuevo shell interactivo, que expandirá el alias:(El
-x
tiene la intención de dejarwatch
de usar su propiash -c
para envolver nuestra orden dada. No queremos que debido a que necesitamos pasar-i
ash
obash
, para que sea un shell interactivo, que Bashrc lee y define los alias. Con-x
, ejecuta el reloj comando usando exec.)Gah, en realidad, esto no funciona. Después de mostrar la salida de 'll' una vez, luego de dormir 2 segundos, el trabajo se pone en segundo plano, con un poco enigmático:
¿Por qué se detuvo? ¿A dónde fue el aparato ortopédico abierto
[
? Maldición, pensé que esta sería una gran respuesta, pero no puedo hacer que funcione.fuente