Определите псевдонимы bash для запуска git от имени конкретного пользователя

Можно ли определить функцию в сценарии 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]». Но аргументы должны быть захвачены во время определения псевдонима.

Ваш код неверен только из-за кавычек. Вам нужно использовать двойные кавычки, а не одинарные кавычки, чтобы расширение имело место.

Charles Duffy 31.10.2022 15:19
alias_git_as() { alias "git_as_$1=GIT_AUTHOR_NAME=$2 GIT_AUTHOR_EMAIL=$3"; }
Charles Duffy 31.10.2022 15:19

Кстати, удаление ключевого слова function является преднамеренным. См. wiki.bash-hackers.org/scripting/obsolete (соответствующие записи есть в двух отдельных таблицах)

Charles Duffy 31.10.2022 15:20

Что значит «не будет работать»?

knittl 31.10.2022 15:22

Как вы хотите использовать этот псевдоним? Позвонить один раз, чтобы сменить автора или использовать вместо обычной команды git? Потому что ты никогда не звонишь git.

knittl 31.10.2022 15:30

Извините, я имел в виду: alias git_as_$1='GIT_AUTHOR_NAME=$2 GIT_AUTHOR_EMAIL=$3 в о.п. Что значит не будет работать? > Но он оценивает аргументы не во время определения псевдонима, а позже, когда псевдоним вызывается. Это непреднамеренно и делает подход бесполезным.

avans 31.10.2022 15:31

Пожалуйста, не редактируйте свой вопрос таким образом, чтобы существующие ответы больше не имели смысла. Можно исправить что-то после того, как на это укажут комментарии; но как только это зафиксировано в ответах, оно должно остаться.

Charles Duffy 31.10.2022 15:32

Я вернул вопрос. @knittl: я хочу определить псевдоним один раз для каждого из группы пользователей, чтобы все пользователи могли запускать git с помощью git_as_username .... в общей системе.

avans 01.11.2022 08:34

@avans, если ваши пользователи аутентифицируются с помощью ключей ssh, вы можете поместить конфигурацию для каждого ключа в файл authorized_keys и таким образом автоматически установить переменные среды для каждого пользователя.

Charles Duffy 01.11.2022 12:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Две проблемы:

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

Кроме того, чтобы это работало с именами с пробелами, мы используем функцию 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"
}

Другие вопросы по теме