Я хочу легко установить псевдоним git-go
для этой терминальной линии:
git commit -m "init "; git push; git status
Поэтому, когда я вхожу в git-go, эта строка должна войти.
Как я могу это сделать? Ответы, которые я видел, покрывают только псевдоним команды без параметров. Но я хочу установить псевдоним произвольной терминальной линии.
Вы делаете это так же, как и любой псевдоним.
alias git-go='git commit -m "init "; git push; git status'
Ситуация, в которой это становится сложным, не , когда псевдоним запускает команду и передает аргументы этой команде, даже если псевдоним запускает несколько команд, разделенных ;
, но вместо этого когда вы хотите, чтобы псевдоним принимал и использовал свои собственные аргументы командной строки.
Например, все, что вы напишите после , имя этого псевдонима будет вставлено в конец и, таким образом, передано в качестве аргументов командной строки третьей команде git
после git status
. (Действительно, следующий текст вставляется не в конец, а в том, что следующий текст остается один, а псевдоним заменяется его определением.)
Таким образом, вы можете запустить псевдоним без аргументов, который работает, и последняя команда - git status
:
git-go
Или вы можете запустить его с аргументами, которые вы хотите передать git status
. Например, когда вы запускаете его таким образом, последняя команда будет git-status --show-stash
:
git-go --show-stash
Что вы не можете сделать с псевдонимом в Bash (и других оболочках в стиле Борна) это заставить псевдоним принимать аргументы командной строки и размещать их где-то еще, чем в конце.
Например, предположим, что вы хотели, чтобы git-go
принял аргумент, который он использует для сообщения фиксации. Вы не сможете написать это как псевдоним. Решение состоит в том, чтобы вместо этого записать ее как функцию оболочки:
git-go() { git commit -m "$1"; git push; git status; }
В определении функции оболочки позиционные параметры $1
, $2
и т. Д. Содержат значения команды -линейные аргументы передаются в функцию оболочки. У псевдонимов нет никакой функциональности, которая соответствует этому, потому что расширение псевдонима - действительно форма макропереработки, происходящей очень рано, когда оболочка анализирует команду.
Конечно, вы можете записать это как функцию оболочки, даже если вам не нужно использовать позиционные параметры в определении, как предлагает Видеонавт .
Поскольку вы имеете дело с git
командами, вы также можете узнать синтаксис для добавления псевдонима, особенно для git
:
git config --global alias.go '!sh -c "git commit -m \"init\"; git push; git status"'
Это добавит новый псевдоним в ваш локальный git
(в ~/.gitconfig
) и позволяют вам выдавать
git go
, когда они находятся внутри репозитория git
. Всякий раз, когда вы запускаете git go
, вызывается оболочка, и ей передается команда git commit -m "init"; git push; git status
.
См. документацию по git для более подробной информации.
Вы можете объявить его функцией в вашем файле ~/.bash_aliases
следующим образом:
git-go(){
git commit -m "init "
git push
git status
}
или вы можете создать псевдоним в том же файле, например:
alias git-go='git commit -m "init "; git push; git status'
Do не забудьте повторно открыть свой терминал или исходный файл (. ~/.bash_aliases
) после того, как вы изменили его.
Это была проблема с цитированием. Я пробовал это:
alias="git commit -m "init "; git push; git status"
Но получил эту ошибку:
bash: ; git push; git status: command not found
Я получил эту ошибку, потому что я неправильно использовал вложенные кавычки. Вот правильный синтаксис:
alias='git commit -m "init "; git push; git status'
Или:
alias="git commit -m 'init '; git push; git status"
Или без кавычек, если в сообщении о фиксации нет пробелов:
alias="git commit -m init; git push; git status"