נחמד. כמה הצעות.
ה-shebang צריך להיות #!/usr/bin/env sh, שהוא הכי נייד. הסקריפט לא משתמש בשום דבר ספציפי ל-bash ולכן הוא אמור לעבוד בכל shell תואם Bourne 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 מכיוון שאני לא רוצה שזה יקרה כל הזמן.