2016-05-13 2 views
4

Я узнал сегодня, что могу написать !$, чтобы получить последний аргумент из последней выполненной команды.

Теперь я пытаюсь создать псевдоним, используя этот ярлык, и он не работает вообще.

Это те, которые я пытаюсь создать.

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

И это выходной результат при вызове gal или gcl

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

Так что похоже !$ просто не заменяется последним аргументом из последней команды в этом контексте.

Возможно ли это?

+6

Поскольку Bash расширяет '$', нет никакого способа это может быть «хранится» где-то позже. Я думаю, что было бы разумнее сказать «alias gal =« git add »', а затем вызвать его с помощью '! $' В нем -> 'gal! $'. – fedorqui

+0

@fedorqui Это определенно лучший вариант. – 123

+1

Почему вы не используете переменную ['$ _'] (http://www.gnu.org/software/bash/manual/bashref.html#index-_0024_005f)? –

ответ

2

Вместо возился с историей Bash, вы, возможно, также необходимо использовать Bash's $_ internal variable: Соответствующая часть ручных состояний:

$_: [...] расширяет до последнего аргумента предыдущей команды после расширения. [...]

Например:

$ 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 
$ 

В вашем случае, ваши псевдонимы будет выглядеть:

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

Вы можете использовать Баш встроенные команды История fc: пример

$ 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

Не должно быть '-1', иначе вы будете выводить две команды назад? – 123

+0

Я тоже так думал, но потом я его протестировал и увидел, что с «-1» использовалось последнее слово команды * current *. Интересно, если псевдоним уже каким-то образом находится в стеке истории к моменту выполнения fc? Не знаю. –

Смежные вопросы