Как установить псевдоним для терминальной линии?

Я хочу легко установить псевдоним git-go для этой терминальной линии:

git commit -m "init "; git push; git status

Поэтому, когда я вхожу в git-go, эта строка должна войти.

Как я могу это сделать? Ответы, которые я видел, покрывают только псевдоним команды без параметров. Но я хочу установить псевдоним произвольной терминальной линии.

9
задан 19 June 2019 в 23:02

4 ответа

Вы делаете это так же, как и любой псевдоним.

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 и т. Д. Содержат значения команды -линейные аргументы передаются в функцию оболочки. У псевдонимов нет никакой функциональности, которая соответствует этому, потому что расширение псевдонима - действительно форма макропереработки, происходящей очень рано, когда оболочка анализирует команду.

Конечно, вы можете записать это как функцию оболочки, даже если вам не нужно использовать позиционные параметры в определении, как предлагает Видеонавт .

12
ответ дан 19 June 2019 в 23:02

Поскольку вы имеете дело с 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 для более подробной информации.

4
ответ дан 19 June 2019 в 23:02

Вы можете объявить его функцией в вашем файле ~/.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) после того, как вы изменили его.

10
ответ дан 19 June 2019 в 23:02

Это была проблема с цитированием. Я пробовал это:

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"
3
ответ дан 19 June 2019 в 23:02

Другие вопросы по тегам:

Похожие вопросы: