【发布时间】:2019-09-07 18:12:06
【问题描述】:
我在 bash 脚本中有以下功能。让我们将此脚本称为example.sh。它位于应该更新的 git 存储库中。
example.sh(简化版)
# Directory of script
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
update() {
( cd "$dir" && git pull )
}
if [ "$1" == "update" ]; then
update
fi
然后我调用example.sh update(它调用函数),所以它执行git pull。
现在的问题是当example.sh 发生变化时,它需要自行更新。 Linux 这样做没有问题,但 GitBash (Windows..) 抱怨说:
错误:无法创建文件 example.sh:权限被拒绝
可能是因为它仍在使用 example.sh update 并等待 git pull 完成。
我已经试过了
( cd "$dir" && git pull & )
和
bash -c "sleep 1 && cd \"$dir\" && git pull" &
如何启动一个新进程来更新这个 repo,以便在git pulling 时没有文件在使用?
【问题讨论】:
-
可能什么也做不了。出于某种原因,bash 和其他一些 shell 我尝试在运行时为脚本文件保留一个描述符。
-
您尝试过我的解决方案吗?我很好奇自己是否有效。