Ответ 1
Итак, сначала:
BRANCH_NAME=$(git branch 2>/dev/null | grep -e ^* | tr -d ' *')
является основным излишеством:-) Использование:
branch=$(git symbolic-ref --short HEAD) || ...
чтобы получить имя текущей ветки. Часть после ||
- "что делать, если вы не на ветке" (т.е. Если вы находитесь в режиме "отсоединенной головы" ), вам придется решить это для себя. (Ваш текущий код устанавливает BRANCH_NAME в пустую строку, для этого вам даже не нужна часть ||
, но вы можете добавить -q
или 2>/dev/null
, чтобы избежать "фатального": сообщение от символа-ref.)
Остальное - это просто базовые сценарии. В bash вы можете напрямую использовать регулярное выражение, в старых sh вы можете вызывать expr
или sed
. Оба sed
и tr
могут иметь верхний регистр-ify, но sed также может выполнять регулярное выражение, поэтому он выглядит как хороший кандидат:
$ trimmed=$(echo $branch | sed -e 's:^\([^-]*-[^-]*\)-.*:\1:' -e \
'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/')
$ echo $trimmed
TICKET-45
Наконец, это немного опасно:
echo "some stuff $(cat $1)" > $1
поскольку вы в зависимости от оболочки расширяете $(cat $1)
до того, как он обрезает выходной файл для части > $1
. (Очевидно, что это работает, но вы подвержены капризам оболочки.) Лучше использовать временный файл или, возможно, еще один sed
, но на месте:
sed -i .bak -e "1s:^:[$trimmed] :" $1
# or use -i '', but note minor warning in sed man pages
Вышеуказанное тестирование проводится только по частям, но должно работать.