zsh – Definir un alias y usarlo inmediatamente

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.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım