【问题标题】:Bash script to execute git update执行 git update 的 Bash 脚本
【发布时间】:2014-11-28 05:54:45
【问题描述】:
我正在尝试使用 bash 脚本依次运行多个 git 命令来更新存储库。如果我手动将它输入到终端中,我最后连接的命令可以工作,但在 bash 脚本中它什么也不做。我正在犯什么 bash 语法错误?
cmd1="cd $myGitRepo"
cmd2="git add --all"
cmd3="git commit -m \"test commit msg\""
cmd4="git push"
cmd="$cmd1 && $cmd2 && $cmd3 && $cmd4"
echo "$cmd"
$cmd
【问题讨论】:
标签:
git
bash
github
terminal
【解决方案1】:
遇到此类问题时,请使用调试工具,例如 echo 调试器或 -x 标志:
bash-3.2$ cmd="echo foo && echo bar"
bash-3.2$ $cmd
foo && echo bar
bash-3.2$
这表明当&& 是shell 变量的结果时,它不会被视为语法。等效:
bash-3.2$ set -x
bash-3.2$ $cmd
+ echo foo '&&' echo bar
foo && echo bar
bash-3.2$
-x 标志告诉 shell 在运行之前打印出每个命令,前面有 + 标记。
(您可以通过在前面添加eval 将其视为语法,但总的来说这不是一个很好的计划。)
是否有理由不只编写您想要完成的实际命令,例如:
cd $myGitRepo && git add --all && git commit -m "test commit msg" && git push
作为脚本的主体?
如果你想在命令失败后自动退出,sh 和 bash 都支持set -e; bash 给它一个附加名称errexit(作为-o 选项)。所以set -e 告诉 shell 如果任何简单命令失败就立即退出:
set -e
cd $myGitRepo
git add --all
git commit -m "test commit msg"
git push
(要结束 -e 行为,只需 set +e。)