2016-08-03 25 views
1

ich über eine Menge in Bahnen bewegen, und zu versuchen, einen Aliasnamen zu verwenden, setzen die Eingabe zu minimieren:alias Shell Variable dereferenzieren

alias restore  'set restore=\!*; cd \$${restore}' 
alias save   'setenv \!* `pwd`' 

ich Tcsh bin mit; die Werke retten, aber die Wiederherstellung fehlschlägt:

2% save x 
2% cd 
2% restore x 
$x: No such file or directory. 

ich die var inspizieren (x) und es ist in Ordnung, so bin ich nicht richtig dereferencing?

Antwort

0

Dies funktioniert:

alias restore ' cd ` echo $\!* ` ' 

Ihre ursprüngliche Versuch besser geschrieben werden als:

alias restore ' cd \$\!* ' 

Diese (und Ihre Original) funktioniert nicht, weil variable Erweiterung geschehen muss Erstens, und in diesem Fall gibt es keine variable Erweiterung, weil $ Escape ist. Nachdem !* erweitert wurde, gibt es keine weitere Variablenerweiterung.

In meiner vorgeschlagenen Lösung vermeide ich $ zu entkommen, indem ich eine echo in einer Sub-Shell läuft, so dass es gut funktioniert.


Nur um sicherzugehen, Sie sind sich dessen bewusst pushd und popd, nicht wahr? Für die meisten Benutzer sind diese nützlich und leistungsfähig genug, obwohl ich sicherlich den Wert in Ihren Aliasen hier sehen kann.

+0

Ah, ich habe etwas historisches Gepäck, das Push/Pop waren mehr über Muscheln (Ptycon um genau zu sein aus einer vergangenen Ära). ;-) Ich würde diese nicht mit Push/Pop übertrumpfen, also save/restore; Ich setze darauf, danke: alias wiederherstellen 'cd 'echo $ \! *'; pwd – slashlos