定义bash别名以特定用户身份运行git

rxztt3cl  于 2022-11-20  发布在  Git
关注(0)|答案(1)|浏览(131)

有没有可能在bash脚本中定义一个函数,为不同的用户定义git别名,以便让用户在共享系统上应用他们的更改,从而使提交包含他们的用户名和电子邮件?

alias git_as_user1='GIT_AUTHOR_NAME="User1_pre User1_sur" GIT_AUTHOR_EMAIL="user1@company.de" GIT_SSH="/home/account/ssh_user_wrapper.sh" GIT_COMMITTER_NAME=$GIT_AUTHOR_NAME GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL git'

我提出了下面的函数,但它不是在定义别名时计算args,而是在以后调用别名时计算args。这是无意的,使该方法变得无用。

function alias_git_as ()
{
  alias git_as_$1='GIT_AUTHOR_NAME=$1 GIT_AUTHOR_EMAIL=$2
}

在.basrc中:

alias_git_as "login" "Surname Prename" "user@company.de"
  • 〉不起作用!!!-〉定义别名git_as_login,但第二个和第三个参数被忽略。当某个用户从他的终端运行git_as_login时,他需要再次传递“Surname Prename”“user@company.de“。但参数应该在定义别名时捕获。
ovfsdjhp

ovfsdjhp1#

两个问题:

  • 您使用单引号,但它们会抑制扩展;要使扩展尽早发生,您需要使用双引号。
  • 您的原始程式码只有两个参数,但您的范例使用了三个参数。

此外,为了使这一功能适用于带有空格的名称,我们使用了下面的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" "user@company.de"

# 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"
}

相关问题