Tengo una línea a la que quiero llamar usando un alias.
while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"; do sleep 30; done
Intenté escapar '
pero \'
no funcionó.
¿Cuál es la sintaxis correcta para usar arriba de una sola línea en alias?
Respuesta1
alias my_du=$'while printf \'%s \' "$(df -P / | awk \'NR==2 { print $(NF-1) }\')"; do sleep 3; done'
Puedes comprobar el resultado con
alias my_du
Si $()
se cita por "
en lugar de '
o \
luego se sustituye y el resultado, en lugar de la llamada al programa prevista, pasa a formar parte de la definición del alias.
Respuesta2
Si bien esto se puede convertir en un alias, generalmente se prefieren las funciones. De man bash
:
Para casi todos los propósitos, los alias son reemplazados por funciones de shell.
Su alias en forma de función:
my_du() {
while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"
do
sleep 30
done
}
Eso es más legible y, como tal, más fácil de mantener.
Respuesta3
No puede escapar de las comillas simples mientras todavía están entre comillas simples porque \
se toma literalmente en un contexto de comillas simples. Cierra las comillas simples antes de escapar o, mejor, usa comillas dobles.
alias my_du="while printf '%s ' \"\$(df -P / | awk 'NR==2 { print \$(NF-1) }')\"; do sleep 30; done"
Respuesta4
Si desea comandos que tomen argumentos o interactúen de alguna manera con su entorno, use funciones. Al menos en bash, los alias se expanden cuando se definen,podríaactuar como si tomaran argumentos o usaran variables. A veces. La ley de Murphy garantiza que eso no funcionará cuando sea realmente necesario.