代码之家  ›  专栏  ›  技术社区  ›  Max Doung

如何从无限循环中停止bash脚本?

  •  1
  • Max Doung  · 技术社区  · 7 年前

    我的项目目录中有一个名为shrinkwrap的bash脚本。上海:

    update_package_json_changed_files() {
      echo "> changed files"
    
      git diff --cached --name-only | grep -x package.json
    }
    
    update_shrinkwrap_and_at_to_git_index() {
      echo "> Updating npm-shrinkwrap.json and adding to current commit."
    
      npm shrinkwrap
      git add npm-shrinkwrap.json 
    }
    
    if get_package_json_changed_files; then
      update_shrinkwrap_and_at_to_git_index
    fi
    

    "scripts": {
      "shrinkwrap": "bin/shrinkwrap.sh"
    }
    

    我安装了npm pre commit,以便按如下方式执行脚本:

    "pre-commit": ["shrinkwrap"]
    

    当我尝试提交时,脚本进入infinte循环。它一直在运行,没有什么可以阻止它。我尝试了command+C,control+Z。什么都没用。以前有人遇到过这个问题吗?为什么会这样?

    1 回复  |  直到 7 年前
        1
  •  1
  •   VonC    7 年前

    它可能是在文件更改时触发的,并继续更改至少一个文件,这反过来会触发它(在文件更改时),这使它更改一个文件,这。。。等等

    update_shrinkwrap_and_at_to_git_index() 存在
    如果它存在,请删除它(但不要做任何其他事情)

    因此:

    • 将_shrinkwrap_和_at_更新为_git_index() touch /tmp/in_progress
    • if get_package_json_changed_files; 添加 if [ -e /tmp/in_progress ]; then rm /tmp/in_progress; exit 0; fi

    这个 OP Max Doung 评论:

    我补充道 sudo 到前面 npm shrinkwarp ,它确实停止了循环。当我把它拿出来时,循环又开始了。想知道为什么?

    ~/.gitconfig 例如)

    root 通过 苏多