Bash脚本执行git更新

时间:2014-11-28 05:54:46

标签: git bash github terminal

我正在尝试使用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

1 个答案:

答案 0 :(得分:2)

遇到这样的问题时,请使用调试工具,例如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 来将其视为语法,但通常这不是一个非常好的计划。)

有没有理由不写下你想要的实际命令,例如:

set -e

作为剧本的主体?

如果你想在失败的命令后自动退出,sh和bash都支持errexit; bash为此提供了额外的名称-o(作为set -e选项)。因此,如果任何简单命令失败,set -e cd $myGitRepo git add --all git commit -m "test commit msg" git push 会告诉shell立即退出:

-e

(要结束set +e行为,只需{{1}}。)