Git не создает файл .gitconfig, когда он находится внутри функции

#bash #git #shell #git-config

#bash #git #оболочка #git-config

Вопрос:

Я довольно новый пользователь в Bash и Git в целом, и я ломаю голову над тем, в чем может быть проблема. Я создаю код, который проверяет, существует ли файл .gitconfig, и если его нет, он позволяет вам настроить его почти автоматически, используя команду чтения, чтобы получить ваш адрес электронной почты и имя пользователя и применить их в строке кода.

Пример кода:

 #!/bin/bash

# colors
RED='33[0;31m'
GREEN='33[0;32m'
YELLOW='33[1;33m'
NO_COLOR='33[0m'

# function git
git () { 
   printf "${RED}Set your Git emailn${NO_COLOR}"
   read GIT_AUTHOR_EMAIL
   git config --global user.email "$GIT_AUTHOR_EMAIL"
   printf "${RED}Set your Git usernamen${NO_COLOR}"
   read GIT_AUTHOR_USERNAME
   git config --global user.name "$GIT_AUTHOR_USERNAME"
   git config --list | grep user.email amp;amp; git config --list | grep user.name
}

# git check amp; configuration
if [ -f ".gitconfig" ]; then
   printf "${YELLOW}Git was previously configuredn${NO_COLOR}"
   exit
else
   git
   printf "${YELLOW}Donen${NO_COLOR}"
   exit
fi
 

Если он не существует, он вызывает функцию для его настройки, но после некоторой быстрой отладки с помощью set -x команды я разобрался с файлом .gitconfig не создается вообще, но это происходит, когда я делаю это сам вне функции. Все, что он делает, это возвращается read GIT_AUTHOR_EMAIL , применяет код git config --global user.email "$GIT_AUTHOR_EMAIL" и возвращается к первой команде чтения. Я хочу, чтобы код проверял .gitconfig, и если он существует, он также спросит, хочет ли пользователь перенастроить свои данные Git. Я очень близок к этому.

Могу ли я как-нибудь это исправить или сделать по-другому?

Ответ №1:

После того, как вы определили функцию git , любой вызов имени git в этом процессе оболочки будет ссылаться на эту функцию оболочки. Если вы хотите вызвать программу git , вам нужно добавить к ней префикс встроенного command :

 command git config --global user.name "$GIT_AUTHOR_USERNAME"
 

Если вы не собирались переопределять git команду, то, вероятно, вы захотите назвать свою функцию оболочки по-другому, что позволит полностью избежать проблемы.

Комментарии:

1. Присвоение функции имени чему-то другому кажется гораздо лучшим решением.

2. По-видимому, простое переименование функции оболочки, похоже, устраняет проблему. Спасибо, что указали на это!