在bash脚本中,我需要提示用户输入电子邮件地址,但前提是没有设置git user.email或没有ssh密钥。我对bash的经验很少,所以我一次又一次地为这个项目进行stackoverflow。
基于this stackoverflow answer,我想出了这个:
if [[ ! -f "$HOME/.ssh/id_rsa" ]]; then
echo "No File Found"
else
echo "File Found"
fi
这有预期的行为:如果id_rsa
存在,它说File Found;如果我删除id_rsa
,它说没有找到文件。
但是,我无法将其作为更长时间表达的一部分。这是我到目前为止所拥有的:
md_email=$4
... more code ...
if [[ "$md_email" = "" && "`git config --get user.email`" = "" || ! -f "$HOME/.ssh/id_rsa" ]]; then
echo "No File Found"
else
echo "File Found"
fi
这将始终打印No File Found。我尝试了括号,双括号和括号的各种组合,希望将第二个和第三个表达式从第一个表达式中隔离出来,并以可能使其工作的方式将第三个表达式与其余表达式隔离开来。一切都无济于事。我错过了什么?
应@codeforester的要求:
ls -l $HOME/.ssh/id_rsa
-rw------- 1 menasheh menasheh 3243 Feb 13 22:52 /home/menasheh/.ssh/id_rsa`
你可以这样做:
md_email=$4
git_email=$(git config --get user.email)
if [[ ! $md_email ]] && [[ ! $git_email || ! -f "$HOME/.ssh/id_rsa" ]]; then
echo "user.email not set or id_rsa is not present"
fi
! $md_email
为真;同样的事情也适用于! $git_email
检查id_rsa存在的if条件对我来说很好。请在您的问题中包含ls -l $HOME/.ssh/id_rsa
的输出。
你可能想看看这篇文章:How to use double or single brackets, parentheses, curly braces