En zshesto funciona bien:
alias foo=ls
foo
Pero esto no:
alias foo=ls; foo
Al presionar enter un tiempo extra no es un problema cuando se ejecuta de forma interactiva. Pero cuando atravesarlo de sshrepente 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 zshsabe que tiene un alias:
% ssh zsh@server 'alias foo=ls; alias'
foo=ls
run-help=man
which-command=whence
¿Cómo saber zshque los alias deben estar activos?

bashycshy se comportaron de la misma manera. Espero que alguien pueda explicar eso.Respuestas:
No puedes hacerlo.
Debido a que los alias se expandieron solo después de la expansión del historial y se leyó toda la línea de una vez, por lo que cuando
foose ejecutó, el proceso de expansión de alias desapareció, es demasiado tarde para que el shell reconozca un nuevo alias.La mejor manera de hacerlo es definir un alias
.zshrco usar funciones como la respuesta de jimmij o usareval:Hay un caso especial con zsh -c . En este caso, los alias que se definieron en
.zshenvse expandirán.fuente
ssh host 'alias foo=bar<newline>foo'no funciona. Hay un caso especial parazsh -calias foo=ls; eval foosshcaso, ¿podría aclararlo más? Creo que el comando todavía se leía de una vez.Este es un problema muy conocido que incluso se describe en el
zshmanual en el capítulo ALIAR (verman zshmisc). La forma recomendada de tratarlo es usar la función en lugar del alias:o mejor aún en el caso de
ls:PD. el punto y coma al final de la definición de función (lista) y los espacios no son necesarios en zsh, pero como un hábito de otros shells todavía los pongo.
fuente
Usando el c-shell (tcsh para ser exactos) de la línea de comando:
o póngalo en el archivo .cshrc y luego obtenga el archivo:
fuente