0

我有这个小脚本,用于检查 git 配置中是否存在用户名和电子邮件,否则提示用户输入它们:

GIT_USER_EXISTS=`git config --get-regexp 'name' | awk '{print $2}'`
GIT_EMAIl_EXISTS=`git config --get-regexp 'name' | awk '{print $2}'`
while [[ -z $GIT_USER_EXISTS || -z $GIT_EMAIl_EXISTS ]]; do
    echo "User name and Email are not set in git. Please enter them now..."
    echo "First and Last name:"
    read gitUser
    git config --global user.name "$gitUser"
    echo "Email:"
    read gitEmail
    git config --global user.email "$gitEmail"
done

但它不起作用;)

第一 - 它甚至没有首先进入循环。我的猜测是,与 grep 不同,awk 确实在变量中插入了一些(隐藏的?)字符。第二 - 我不确定脚本是否可以识别现在的值,因为我在循环之外声明了变量。我在这个假设上错了吗?

编辑:

我通过使用反引号而不是变量名的引号解决了第一个问题。第二个问题仍然存在 - 一定有比两次声明变量更好的用法?!类似于 do...while in shell 的东西?

编辑#2:

这样做的效果稍微好一点,但有一个相当长的条件语句。能不能再短一点?

while [[ -z $GIT_USER_EXISTS || -o $GIT_USER_EXISTS || -z $GIT_EMAIl_EXISTS || -o $GIT_EMAIl_EXISTS ]]; do
    echo "User name and Email are not set in git. Please enter them now..."
    echo "First and Last name:"
    read gitUser
    git config --global user.name "$gitUser"
    echo "Email:"
    read gitEmail
    git config --global user.email "$gitEmail"

    GIT_USER_EXISTS=`git config --get-regexp 'name' | awk '{print $2}'`
    GIT_EMAIl_EXISTS=`git config --get-regexp 'name' | awk '{print $2}'`
done

实际上它几乎可以解决问题 - 它应该是“如果 var 已设置并且为空或 var 未设置”。但这太长了:)

4

1 回答 1

1

尝试这样做:

GIT_USER_EXISTS="git config --get-regexp 'name' | awk '{print $2}'"
GIT_EMAIl_EXISTS="git config --get-regexp 'name' | awk '{print $2}'"
while [[ -z $GIT_USER_EXISTS || -z $GIT_EMAIl_EXISTS ]]; do
    echo "User name and Email are not set in git. Please enter them now..."
    echo "First and Last name:"
    read gitUser
    git config --global user.name "$gitUser"
    echo "Email:"
    read gitEmail
    git config --global user.email "$gitEmail"
    GIT_USER_EXISTS="git config --get-regexp 'name' | awk '{print $2}'"
    GIT_EMAIl_EXISTS="git config --get-regexp 'name' | awk '{print $2}'"
done
  • 如果你测试$GIT_USER_EXISTSor $GIT_EMAIl_EXISTS,你应该在某处声明它;)
于 2012-11-02T22:49:36.853 回答