Как создать псевдоним для команды git [action] (включая пробелы)?

Большинство моих моих псевдонимов имеют такую ​​форму: alias p='pwd'

Я хочу добавить псевдоним git commit, чтобы он выполнял git commit -v

Но попытка создания псевдонима с пробелом дает ошибку:

$ alias 'git commit'='git commit -v'
-bash: alias: `git commit': invalid alias name
25 голосов | спросил Michael Durrant 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 22 Sep 2012 19:13:23 +0400 2012, 19:13:23

5 ответов


17

Вы говорите о команде, которая содержит пробел, но здесь команда git, и там нет места.

Чтобы вызвать команду git commit , вам нужно записать ее

git\ commit ...
'git commit' ...
"git commit" ...

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

csh, tcsh или zsh позволят вам использовать псевдоним любого из вышеперечисленных, но не bash или ksh (хотя pdksh позволит вам, но вы не дадите им использовать их). В zsh:

alias "'git commit'=git commit -v"
'git commit' ...

Выполним команду git command (при вызове 'git command' (только с одинарными кавычками)) псевдоним для команды git с помощью commit и -v. Не то, что вы искали, я бы догадался.

Потому что alias может только псевдоним команды , все, что вы можете здесь, это git, и вам нужно будет добавить псевдоним к чему-то, что добавляет «-v» после «commit» в свой список аргументов. Лучше всего было бы пойти с решением @ jw013, но если по какой-то причине вы не можете или не хотите, вместо использования псевдонима вы можете использовать функцию для выполнения задания:

git() {
  if [ "$1" = commit ]; then
    shift
    set -- commit -v "[email protected]"
  fi
  command git "[email protected]"
}
ответил Stéphane Chazelas 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 22 Sep 2012 20:39:44 +0400 2012, 20:39:44
9

В Bash вы не можете создать псевдоним для команды с любым пробелом в ней.
Тем не менее, я использую следующую функцию в моем .bashrc как обходной путь.

sudo() { if [[ [email protected] == "pacman -Syu" ]]; then command pacup.sh; else command sudo "[email protected]"; fi; }

Как это работает: Вы начинаете с команды, которую хотите вызвать. В моем случае это sudo.
Затем вы указываете, какие параметры потребуется. В этом случае pacman -Syu.
Если, вызвано, какая команда должна выполняться? В приведенном выше выражении это pacup.sh.
Else, какая команда должна быть выполнена, sudo [email protected]. [email protected], как вы уже догадались, список параметров, который принимает команда.

Итак, создав команду для вашего конкретного случая, это будет:

git() { if [[ $1 == "commit" ]]; then command git commit -v; else command git "[email protected]"; fi; }

Однако это решение для более общего случая, когда вы хотите, чтобы команды alias с пробелами в них.
В вашем конкретном случае я бы порекомендовал вам пойти с решением jw013 для псевдонимов ваших команд git с помощью git-config

ответил darnir 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 23 Sep 2012 08:12:30 +0400 2012, 08:12:30
4

Из справочной страницы псевдонима bash

  

Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Имя псевдонима и текст замены могут содержать любой допустимый ввод оболочки, включая метасимволы оболочки, за исключением того, что имя псевдонима не может содержать `= '.

     

Первое слово заменяемого текста проверяется на псевдонимы, но слово, которое совпадает с расширением псевдонима, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст.

Итак, поскольку проверено только первое слово, вы не можете иметь псевдоним с несколькими словами. В этом вопрос о суперпользователе предоставляется обходной путь с использованием функции:

ls() { if [[ [email protected] == "-la" ]]; then command ls -la | more; else command ls "[email protected]"; fi; }

Он может быть адаптирован к git.

ответил Renan 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 22 Sep 2012 19:25:05 +0400 2012, 19:25:05
0

Несмотря на то, что правильное решение заключается в использовании псевдонимов, таких как jw013, для создания псевдонима с пробелами вы можете использовать псевдонимы NEST.

Например, у меня есть псевдоним для удаления ветви как локально, так и удаленно, но я хотел бы, чтобы пользователь всегда указывал ветку:

remrem = "!sh -c 'if [ $# -ne 1 ]; then git specBranch; else git push origin :$1 && git branch -d $1; fi' -"

#echoing aliases
specBranch = "!sh -c 'echo Specify branch please!'" 
ответил Empus 10 PMpTue, 10 Apr 2018 12:25:56 +030025Tuesday 2018, 12:25:56
-1

Из этого примера это должно работать:

  

Итак, если вы все еще хотите использовать sudo с другими командами, но не с выключением, и если вы можете позволить себе вызывать алиас на что-то еще, вы можете:

alias sudo='sudo '
alias shutdown="echo nope"

Но с вашими командами:

alias git='git '
alias commit="commit -v"
ответил Pureferret 19 MarpmThu, 19 Mar 2015 14:07:56 +03002015-03-19T14:07:56+03:0002 2015, 14:07:56

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132