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

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

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

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

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

Ответы [ 4 ]

12 голосов
/

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

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

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

10 голосов
/

Вы можете объявить это функцией в вашем файле ~/.bash_aliases следующим образом:

git-go(){
    git commit -m "init "
    git push
    git status
}

или вы можете создать псевдоним в том же файле, например:

alias git-go='git commit -m "init "; git push; git status'

Не забудьте повторно открыть свой терминал или получить исходный файл (. ~/.bash_aliases) после его изменения.

4 голосов
/

Поскольку вы имеете дело с 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 для дальнейших деталей.

3 голосов
/

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

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"
...