Большинство моих моих псевдонимов имеют такую форму: alias p='pwd'
Я хочу выполнить alit git commit
чтобы он git commit -v
Но попытка создать псевдоним с пробелом дает ошибку:
$ alias 'git commit'='git commit -v' -bash: alias: `git commit': invalid alias name
Не прямой ответ на ваш вопрос (поскольку псевдонимы могут быть только одним словом), но вместо этого вы должны использовать git-config
:
git config --global alias.civ commit -v
Это создает псевдоним git, так что git civ
запускает git commit -v
. К сожалению, AFAIK не может переопределить существующие команды git с псевдонимами . Однако вы всегда можете выбрать подходящее имя псевдонима, чтобы жить как альтернатива.
Вы говорите о команде, которая содержит пробел, но здесь команда 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 "$@" fi command git "$@" }
В Bash вы не можете создать псевдоним для команды с любым пробелом в ней.
Тем не менее, я использую следующую функцию в моем .bashrc как обходной путь.
sudo() { if [[ $@ == "pacman -Syu" ]]; then command pacup.sh; else command sudo "$@"; fi; }
Как это работает: вы начинаете с команды, которую хотите вызвать. В моем случае это sudo
.
Затем вы указываете, какие параметры потребуется. В этом случае, pacman -Syu
.
Если, вызвано, какая команда должна выполняться? В приведенном выше pacup.sh
это pacup.sh
.
Else, какая команда должна быть выполнена, sudo $@
. $@
– это, как вы уже догадались, список параметров, который принимает команда.
Итак, сделав команду для вашего конкретного случая, это будет:
git() { if [[ $1 == "commit" ]]; then command git commit -v; else command git "$@"; fi; }
Тем не менее, это решение для более общего случая, когда вы хотите, чтобы команды псевдонимов с пробелами в них.
В вашем конкретном случае я бы порекомендовал вам пойти с решением jw013 для псевдонимов ваших команд git-config
с помощью git-config
На странице man alias bash
Первое слово каждой простой команды, если не указано, проверяется на наличие псевдонима. Если это так, это слово заменяется текстом псевдонима. Имя псевдонима и текст замены могут содержать любой допустимый ввод оболочки, включая метасимволы оболочки, за исключением того, что имя псевдонима не может содержать `= '.
Первое слово заменяющего текста проверяется на псевдонимы, но слово, которое совпадает с расширяемым псевдонимом, не разворачивается во второй раз. Это означает, что можно, например, псевдоним ls -F, и Bash не пытается рекурсивно расширять заменяющий текст.
Итак, поскольку проверено только первое слово, вы не можете иметь псевдоним с несколькими словами. В этом вопросе суперпользователя предоставляется обходное решение с использованием функции:
ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }
Он может быть адаптирован к git
.
Из этого примера это должно работать:
Итак, если вы все еще хотите использовать sudo с другими командами, но не с выключением, и если вы можете позволить себе вызывать алиас на что-то еще, вы можете:
alias sudo='sudo ' alias shutdown="echo nope"
Но с вашими командами:
alias git='git ' alias commit="commit -v"