2014-12-01 3 views
1

Я хочу сделать псевдоним для команды каким-то сложным мерзавца:Баш псевдоним: используя параметры внутри команды оболочки

git push origin HEAD:refs/for/BRANCH-NAME 

Я хочу, чтобы команда my-alias my-branch запустить git push origin HEAD:refs/for/my-branch. До сих пор я пытался:

alias my-push='git push origin HEAD:refs/for/$1' 
alias my-push='git push origin HEAD:refs/for/"$1"' 

Я хотел бы знать правильное решение и объяснение почему выше терпят неудачу.


У меня есть такой псевдоним:

alias run-schema='cd ~/sources/schema; python -m SimpleHTTPServer $1' 

и она отлично работает - нет никаких дополнительных апостроф/цитаты знаки.

+0

Решение от @fredtantini указывает на это один я хотел бы сделать. – KeAn

+0

@fredtantini это не дубликат. Сначала я нашел ссылку выше, но не смог выяснить, что не так с моей попыткой. – ducin

+0

Как я сказал ниже: у вас не может быть параметров для псевдонима (по дизайну) _ –

ответ

3

Псевдонимы делают замену текста. Когда вы говорите

alias foo='echo $1' 

и вызвать

foo baz 

это заменяется

echo $1 baz 

$1 расширяется до нуля, и вы получите, в сущности, echo baz. Это также способ, которым работает ваш второй псевдоним - или не работает - поскольку $1 в конце, когда он расширяется до нуля, кажется, что он был заменен тем, что происходит после него. Есть забавные способы поиграть с этим. Например, если вы говорите,

alias foo='echo $1' 
bar() { foo; } 
bar qux 

это будет выполнять echo qux.

Решение вашей проблемы, как уже упоминалось, функция:

my_push() { git push origin "HEAD:refs/for/$1"; } 
+0

Хорошо, теперь я вижу, как все это работает. И, самое главное, я знаю почему. Спасибо за объяснение. – ducin

1

Что бы я сделал с помощью функции:

my-push(){ git push origin HEAD:refs/for/"$1"; } 

Вы не можете иметь какой-либо параметр для псевдонима (по дизайну), вам нужна функция оболочки, как я делает здесь. Более того, когда вы помещаете одинарные кавычки вокруг некоторых переменных, переменные никогда не будут оцениваться.

+0

Не могли бы вы удалить слово * some * и предоставить информацию, когда это произойдет? С вашим описанием я точно не знаю, что случилось. – ducin

+0

Одиночные кавычки предотвращают расширение * всех * переменных. – tripleee

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