很好。有几点建议。
shebang 应该是 #!/usr/bin/env sh,这是最可移植的。该脚本不使用任何 bash 特有的语法,因此它应该可以在任何兼容 Bourne shell 的 shell 中运行,而不仅仅是 bash。
在 shebang 之后添加 set -e。这将导致脚本在任何命令失败时退出。否则,它将愉快地继续执行命令,但由于某些原因(例如 bundle install 失败)而稍后失败,并且错误输出已从用户的屏幕上消失。
现在插件的 git pull 有点麻烦,因为写入 STDERR 的错误和失败的 git 执行将无法正确处理。所以我将 STDERR 也推送到 STDOUT 并跟踪退出代码。
不需要一大堆 cd 命令,也不需要设置 PLUGIN_DIR 变量。
#!/usr/bin/env sh
set -e
cd ~/discourse
git pull
for folder in plugins/*; do
if [ -d "$folder/.git" ]; then
exitcode=0
output=$(git -C "$folder" pull 2>&1) || exitcode=$?
if echo "$output" | grep -q -v "Already up to date."; then
echo "[$(basename "$folder")]"
echo "$output"
[ "$exitcode" -ne 0 ] && exit "$exitcode"
fi
fi
done
bundle install
pnpm install
bin/rails db:migrate
DISCOURSE_HOSTNAME=localhost UNICORN_LISTENER=localhost:3000 bin/ember-cli -u
我已经有一个类似的脚本,除了 git pull,因为我不想每次都那样做。