Dans zsh
cela fonctionne bien:
alias foo=ls
foo
Mais cela ne signifie pas:
alias foo=ls; foo
Appuyez sur Entrée une fois de plus n'est pas un problème lors de l'exécution interactive. Mais lors de son exécution, ssh
cela devient soudainement un problème:
% ssh zsh@server 'alias foo=ls; foo'
zsh:1: command not found: foo
Même avec une nouvelle ligne, cela ne fonctionne pas:
% ssh zsh@server 'alias foo=ls;
foo'
zsh:2: command not found: foo
La chose étrange est que zsh
sait qu'elle est aliasée:
% ssh zsh@server 'alias foo=ls; alias'
foo=ls
run-help=man
which-command=whence
Comment dire zsh
que les alias doivent être actifs?
bash
etcsh
ils se sont comportés de la même manière. J'espère que quelqu'un pourrait expliquer cela.Réponses:
Tu ne peux pas le faire.
Étant donné que les alias n'ont été développés qu'après l'expansion de l'historique et que la ligne entière a été lue en une seule fois, donc quand il a
foo
été exécuté, le processus d'expansion des alias a disparu, il est trop tard pour que le shell reconnaisse un nouvel alias.La meilleure façon de faire est de définir un alias dans
.zshrc
ou d'utiliser une fonction comme la réponse de jimmij ou d'utilisereval
:Il y a un cas spécial avec zsh -c . Dans ce cas, les alias définis dans
.zshenv
seront développés.la source
ssh host 'alias foo=bar<newline>foo'
cela ne fonctionne pas. Il y a un cas particulier pourzsh -c
alias foo=ls; eval foo
ssh
cas, pourriez-vous s'il vous plaît clarifier les choses. Je pense que la commande a été lue en une seule fois.C'est un problème très connu qui est même décrit dans le
zsh
manuel au chapitre ALIASING (voirman zshmisc
). La manière recommandée de le traiter est d'utiliser la fonction au lieu de l'alias:ou encore mieux en cas de
ls
:ps. le point-virgule à la fin de la définition de la fonction (liste) et les espaces ne sont pas nécessaires dans zsh, mais comme d'habitude à partir d'autres shells, je les mets toujours.
la source
Utilisation du c-shell (tcsh pour être exact) à partir de la ligne de commande:
ou placez-le dans le fichier .cshrc puis sourcez le fichier:
la source