素晴らしい。いくつか提案があります。
シェバンは、最もポータブルな #!/usr/bin/env sh にすべきです。このスクリプトは bash 固有の機能を使用していないため、bash だけでなく、Bourne shell 互換のシェルでも動作するはずです。
シェバンに 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 に関しては毎回実行したくないため、それ以外は同じです。