【问题标题】: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。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-17
      • 2018-09-05
      • 2016-07-11
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      相关资源
      最近更新 更多