Intereting Posts
Vim: поиск вверх / вниз в файле из определенной точки / позиции Захват текста между фигурными фигурными скобками в предварительно обработанном файле C «While read» также выводит то, что не читается / не редактируется аргумент командной строки с сообщением об использовании Нельзя использовать восклицательный знак (!) В bash? Хостинг на Apache / 2.2.22, сканирование говорит об устаревших Лексика для новичков Как запустить Django и LAMP на разных поддоменах, но на одном сервере Apache? как я могу рассчитывать транзакции на основе даты и времени puppylinux: acpitool -s в файле .sh Как найти матч с окружающими словами? Добавить расширение файла в файлы, которые не имеют расширения уменьшить уровень детализации журнала загрузки ядра Как обновить npm до последней версии в Fedora Как восстановить данные, потерянные во время прерывания локального перетаскивания?

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

Большинство моих моих псевдонимов имеют такую ​​форму: 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"