Можно ли определить функцию в сценарии bash, которая в целом определяет git-псевдонимы для разных пользователей, чтобы пользователи могли применять свои изменения в общей системе, чтобы коммиты содержали их имя пользователя и адрес электронной почты?
alias git_as_user1='GIT_AUTHOR_NAME = "User1_pre User1_sur" GIT_AUTHOR_EMAIL = "[email protected]" GIT_SSH = "/home/account/ssh_user_wrapper.sh" GIT_COMMITTER_NAME=$GIT_AUTHOR_NAME GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL git'
Я придумал следующую функцию, но она оценивает аргументы не во время определения псевдонима, а позже, когда псевдоним вызывается. Это непреднамеренно и делает подход бесполезным.
function alias_git_as ()
{
alias git_as_$1='GIT_AUTHOR_NAME=$1 GIT_AUTHOR_EMAIL=$2
}
В .basrc:
alias_git_as "login" "Surname Prename" "[email protected]"
-> Не работает!!! -> Определяет псевдоним git_as_login, но второй и третий аргументы игнорируются. Когда определенный пользователь запускает git_as_login со своего терминала, ему нужно будет снова передать «Фамилия Преимя» «[email protected]». Но аргументы должны быть захвачены во время определения псевдонима.
alias_git_as() { alias "git_as_$1=GIT_AUTHOR_NAME=$2 GIT_AUTHOR_EMAIL=$3"; }Кстати, удаление ключевого слова function является преднамеренным. См. wiki.bash-hackers.org/scripting/obsolete (соответствующие записи есть в двух отдельных таблицах)
Что значит «не будет работать»?
Как вы хотите использовать этот псевдоним? Позвонить один раз, чтобы сменить автора или использовать вместо обычной команды git? Потому что ты никогда не звонишь git.
Извините, я имел в виду: alias git_as_$1='GIT_AUTHOR_NAME=$2 GIT_AUTHOR_EMAIL=$3 в о.п. Что значит не будет работать? > Но он оценивает аргументы не во время определения псевдонима, а позже, когда псевдоним вызывается. Это непреднамеренно и делает подход бесполезным.
Пожалуйста, не редактируйте свой вопрос таким образом, чтобы существующие ответы больше не имели смысла. Можно исправить что-то после того, как на это укажут комментарии; но как только это зафиксировано в ответах, оно должно остаться.
Я вернул вопрос. @knittl: я хочу определить псевдоним один раз для каждого из группы пользователей, чтобы все пользователи могли запускать git с помощью git_as_username .... в общей системе.
@avans, если ваши пользователи аутентифицируются с помощью ключей ssh, вы можете поместить конфигурацию для каждого ключа в файл authorized_keys и таким образом автоматически установить переменные среды для каждого пользователя.





Две проблемы:
Кроме того, чтобы это работало с именами с пробелами, мы используем функцию bash 5.x ${var@Q} ниже.
# define the function
alias_git_as() { alias "git_as_$1=GIT_AUTHOR_NAME=${2@Q} GIT_AUTHOR_EMAIL=${3@Q}"; }
# use the function
alias_git_as "login" "Surname Prename" "[email protected]"
# use the invoked alias
git_as_login
Смотрите, как это работает на https://ideone.com/PV09NG
Версия, которая совместима со старыми версиями bash, но при этом сохраняет поддержку необычных имен авторов, вместо этого может выглядеть так:
alias_git_as() {
local alias_def
printf -v alias_def 'git_as_%s=GIT_AUTHOR_NAME=%q GIT_AUTHOR_EMAIL=%q' "$1" "$2" "$3"
alias "$alias_def"
}
Ваш код неверен только из-за кавычек. Вам нужно использовать двойные кавычки, а не одинарные кавычки, чтобы расширение имело место.