In zsh
dieser funktioniert gut:
alias foo=ls
foo
Das geht aber nicht:
alias foo=ls; foo
Das Drücken einer zusätzlichen Zeit ist bei interaktiver Ausführung kein Problem. Aber beim Durchlaufen wird ssh
es plötzlich zum Problem:
% ssh zsh@server 'alias foo=ls; foo'
zsh:1: command not found: foo
Auch mit einer Newline funktioniert es nicht:
% ssh zsh@server 'alias foo=ls;
foo'
zsh:2: command not found: foo
Das zsh
Seltsame ist, dass man weiß , dass es ein Alias ist:
% ssh zsh@server 'alias foo=ls; alias'
foo=ls
run-help=man
which-command=whence
Wie können Sie feststellen, zsh
dass die Aliase aktiv sein sollten?
bash
und versuchtcsh
und sie haben sich genauso verhalten. Ich hoffe jemand konnte das erklären.Antworten:
Du kannst das nicht machen.
Da Aliase erst nach der Verlaufserweiterung erweitert wurden und die gesamte Zeile auf einmal gelesen
foo
wurde, war der Alias-Erweiterungsprozess bei Ausführung nicht mehr zu spät, damit die Shell einen neuen Alias erkennt.Der beste Weg, dies zu tun, besteht darin, einen Alias in einer
.zshrc
Funktion wie jimmijs Antwort zu definieren oder diese zu verwenden oder Folgendes zu verwendeneval
:Es gibt einen Sonderfall mit zsh -c . In diesem Fall werden die Aliase, in denen definiert wurde
.zshenv
, erweitert.quelle
ssh host 'alias foo=bar<newline>foo'
es nicht funktioniert. Es gibt einen Sonderfall fürzsh -c
alias foo=ls; eval foo
ssh
Sie bitte etwas klarer machen? Ich denke, der Befehl wurde immer noch auf einmal gelesen.Dies ist ein sehr bekanntes Problem, das sogar im
zsh
Handbuch unter Kapitel ALIASING (sieheman zshmisc
) beschrieben wird. Die empfohlene Art, damit umzugehen, besteht darin, die Funktion anstelle des Alias zu verwenden:oder noch besser bei
ls
:ps. Semikolon am Ende der Funktionsdefinition (Liste) und Leerzeichen werden in zsh nicht benötigt, aber als Gewohnheit von anderen Shells habe ich sie immer noch eingefügt.
quelle
Verwenden der c-Shell (um genau zu sein tcsh) über die Befehlszeile:
oder legen Sie es in die .cshrc-Datei und geben Sie die Datei als Quelle ein:
quelle