2016-05-13 21 views
4

Ich habe heute herausgefunden, dass ich !$ schreiben kann, um das letzte Argument vom letzten ausgeführten Befehl zu bekommen.

Jetzt versuche ich einen Alias ​​mit dieser Verknüpfung zu erstellen und es funktioniert überhaupt nicht.

Dies sind die, die ich versuche zu erstellen.

alias gal='git add !$' 
alias gcl='git checkout !$' 
alias sl='sublime !$' 

Und das ist das Ausgangsergebnis, wenn gal oder gcl

fatal: pathspec '!$' did not match any files 

So rufen scheint es, wie !$ ist einfach nicht durch das letzte Argument von dem letzten Befehl in diesem Zusammenhang ersetzt.

Ist es möglich?

+6

Seit Bash 'erweitert' $, gibt es keine Möglichkeit, es sein kann, irgendwo gespeichert, um später verwendet zu werden. Ich denke, es wäre sinnvoller, alias gal = "git add" zu sagen und dann mit dem '! $' Darin zu beginnen -> 'gal! $'. – fedorqui

+0

@fedorqui Das ist definitiv die beste Option. – 123

+1

Warum verwenden Sie nicht die Variable ['$ _'] (http://www.gnu.org/software/bash/manual/bashref.html#index-_0024_005f)? –

Antwort

2

Statt mit Bash Geschichte von Hantieren, könnte man genauso gut Bash's $_ internal variable verwenden möchten: Der relevante Teil der manuellen Zustände:

$_: [...] expandiert nach der Erweiterung zum letzten Argument des vorherigen Befehls. [...]

Zum Beispiel:

$ touch one two three 
$ echo "$_" 
three 
$ ls 
$ echo "$_" 
ls 
$ a='hello world' 
$ echo $a 
hello world 
$ echo "$_" 
world 
$ echo "$a" 
hello world 
$ echo "$_" 
hello world 
$ 

In Ihrem Fall würde Ihre Aliase aussehen:

alias gal='git add "$_"' 
alias gcl='git checkout "$_"' 
alias sl='sublime "$_"' 
2

Sie können die bash gebautet Geschichte Befehl fc verwenden: ein Beispiel

$ alias re_echo='echo $(fc -ln -2 | awk '\''NR==1 {print $NF}'\'')' 
$ echo foo 
foo 
$ re_echo bar 
foo bar 
$ re_echo baz 
bar baz 
$ re_echo qux 
baz qux 
+0

Sollte es nicht "-1" sein, sonst geben Sie zwei Befehle aus? – 123

+0

Das dachte ich mir auch, aber dann habe ich es getestet und gesehen, dass mit "-1" das letzte Wort des * current * -Befehls benutzt wurde. Ich frage mich, ob der Alias ​​bereits auf dem History-Stack ist, wenn fc ausgeführt wird? Keine Ahnung. –

Verwandte Themen