Я наблюдал отличный курс сценариев оболочки через множество videos. Теперь, когда я думаю, что я хорошо знаком с оболочкой Bourne, я решил написать свой первый сценарий оболочки.неожиданный оператор [: git: in bourne shell script 'if' условное выражение
Цель скрипта: проверить, является ли рабочий каталог git чистым. Если это так, перезапишите рабочий каталог в ветку с именем deployment
. Наконец, переместите ветвь развертывания в начало.
Я закончил с этим кодом:
#!/bin/sh
######################################################
# Deploys working directory to git deployment branch.
# Requires that the working directory is clean.
######################################################
#check if the working directory is clean
if [ git diff-index --quiet HEAD ]
then
if [ git branch -f deployment ]
then
if [ git push origin deployment ]
then
echo
echo "OK. Successfully deployed to git deployment branch."
echo
exit 0 #success
else
echo
echo "Error: failed to push deployment branch to origin."
echo
exit 1 #failure
fi
else
echo
echo "Error: failed to create or overwrite deployment branch."
echo
exit 1 #failure
fi
else
echo
git status #show the status of the working directory
echo
echo "Error: working directory is not clean. Commit your changes first..."
echo
exit 1 #failure
fi
К сожалению, это, кажется, дает мне ошибку: ./tools/deploygit: 9: [: git: unexpected operator
Почему это так? Какой оператор я использую в if [ git diff-index --quiet HEAD ]
, что неожиданно?
В качестве бонуса, есть ли у вас какие-либо предложения или советы по повышению эффективности, логичности или удобочитаемости этого скрипта?
С точки зрения логики, было бы легче понять, если вы сделали что-то вроде: die() {echo "ERROR: $ *"> & 2; выход 1; }; git diff-index --quiet HEAD || умирающий рабочий каталог не чист; git branch -f deployment || die не удалось создать или перезаписать ветвь развертывания ... –
BTW - на какой платформе вы работаете? '/ bin/sh' - это POSIX sh, а не Bourne, практически для каждой операционной системы, построенной за последние два десятилетия, причем Sun является единственным отстающим. (Имя Баша подразумевает, что Борн является его ближайшим предшественником, но это был случай, когда точность была принесена в жертву за хороший каламбур). –