如何从无限循环中停止 bash 脚本?
How to stop a bash script from an infinite loop?
我的项目目录中有这个 bash 脚本,名为 shrinkwrap.sh:
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
我在 package.json 中 运行 将此脚本设置为如下所示:
"scripts": {
"shrinkwrap": "bin/shrinkwrap.sh"
}
我安装了 npm pre-commit 以执行如下脚本:
"pre-commit": ["shrinkwrap"]
当我尝试提交时,脚本进入无限循环。它保持 运行ning,没有什么能阻止它。我尝试了 command + C、control + Z。没有任何效果。以前有人 运行 处理过这个问题吗?为什么会这样?
它有可能在文件更改时被触发,并继续更改至少一个文件,这反过来又触发它(在文件更改时),这使得它更改了一个文件,这...等等.
打破它的一种常用方法是生成一个标志文件(touch /tmp/in_progress),并且仅当该文件不时才调用update_shrinkwrap_and_at_to_git_index()
存在。
如果存在,删除它(但不要做任何其他事情)
所以:
update_shrinkwrap_and_at_to_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条评论:
I added sudo
to in front of npm shrinkwarp
, and it did stop the loop.when I take it out, loop starts again. Wondering why?
这表明挂钩是由用户本地设置触发的(例如 ~/.gitconfig
中的一个)
使用不同的帐户(此处 root
到 sudo
)执行命令将避免使用所述全局用户帐户特定设置。
我的项目目录中有这个 bash 脚本,名为 shrinkwrap.sh:
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
我在 package.json 中 运行 将此脚本设置为如下所示:
"scripts": {
"shrinkwrap": "bin/shrinkwrap.sh"
}
我安装了 npm pre-commit 以执行如下脚本:
"pre-commit": ["shrinkwrap"]
当我尝试提交时,脚本进入无限循环。它保持 运行ning,没有什么能阻止它。我尝试了 command + C、control + Z。没有任何效果。以前有人 运行 处理过这个问题吗?为什么会这样?
它有可能在文件更改时被触发,并继续更改至少一个文件,这反过来又触发它(在文件更改时),这使得它更改了一个文件,这...等等.
打破它的一种常用方法是生成一个标志文件(touch /tmp/in_progress),并且仅当该文件不时才调用update_shrinkwrap_and_at_to_git_index()
存在。
如果存在,删除它(但不要做任何其他事情)
所以:
update_shrinkwrap_and_at_to_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条评论:
I added
sudo
to in front ofnpm shrinkwarp
, and it did stop the loop.when I take it out, loop starts again. Wondering why?
这表明挂钩是由用户本地设置触发的(例如 ~/.gitconfig
中的一个)
使用不同的帐户(此处 root
到 sudo
)执行命令将避免使用所述全局用户帐户特定设置。