Pregunta:
En zsh
esto funciona bien:
alias foo=ls
foo
Pero esto no:
alias foo=ls; foo
Pulsar Intro un tiempo extra no es un problema cuando se ejecuta de forma interactiva. Pero cuando se ejecuta a través de ssh
, de repente se convierte en un problema:
% ssh zsh@server 'alias foo=ls; foo'
zsh:1: command not found: foo
Incluso con una nueva línea no funciona:
% ssh zsh@server 'alias foo=ls;
foo'
zsh:2: command not found: foo
Lo extraño es que zsh
sabe que tiene un alias:
% ssh zsh@server 'alias foo=ls; alias'
foo=ls
run-help=man
which-command=whence
¿Cómo le digo a zsh
que los alias deben estar activos?
Respuesta:
Este es un problema muy conocido que incluso se describe en el manual de zsh
en el capítulo ALIASING (ver man zshmisc
). La forma recomendada de tratarlo es usar function en lugar de alias:
foo() { ls; } ; foo
o incluso mejor en el caso de ls
:
foo() { ls -- "${@:-.}"; } ; foo
PD. punto y coma al final de la definición de la función (lista) y los espacios no son necesarios en zsh, pero como un hábito de otros shells todavía los pongo.