сценарий оболочки, который соответствует строке в сообщении git commit и экспортирует ее - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь написать скрипт оболочки (bash).

Цель сценария -

  • , чтобы получить сообщение о последнем коммите git
  • захватить любой контент внутри [] -покрытия последнего сообщения git commit
  • экспортировать этот контент в переменную среды с именем GIT_COMMIT_MESSAGE_CONTEXT

Пример:

Последнее сообщение git commit= "[Stage] - gitlab trial"

Рабочий пример: экспортированная переменная среды должна быть

echo $GIT_COMMIT_MESSAGE_CONTEXT

Stage

Я нашел следующее, чтобы получить сообщение о последнем коммите git:

echo $(git log -1 --pretty=%B)

[Stage] - gitlab trial

Я новичок в bash-скриптах и, следовательно, мой тест (см. Ниже) пока что несколько неудачен. Может быть, у кого-то есть больше опыта, чтобы помочь здесь.

Мой bash-скрипт (my-bash-script.sh) выглядит следующим образом:

#!/usr/bin/bash

# get last git commit Message
last_git_commit_message="$(git log -1 --pretty=%B)"

export LAST_GIT_COMMIT_MESSAGE="$last_git_commit_message"

Я запускаю bash-скрипт в терминалеследующим образом:

bash my-bash-script.sh

После закрытия / повторного открытия Терминала я набираю:

echo $LAST_GIT_COMMIT_MESSAGE


К сожалению, безрезультатно.

Вот мои вопросы:

  1. Почему я не получаю эхо-переменную env после запуска bash-скрипта?
  2. Как вычесть содержимое [] -parenthis последнего сообщения git commit?
  3. Как переписать мой скрипт?

Ответы [ 2 ]

3 голосов
/ 06 ноября 2019

Сценарий выглядит нормально, но подход имеет недостатки. Bash может экспортировать только переменные в подоболочки, но не наоборот. Когда вы вызываете скрипт, запускается новая оболочка. Все переменные в этой оболочке, даже экспортированные, будут потеряны после завершения работы скрипта. См. Также здесь .

Некоторые возможные пути решения этой проблемы:

  1. Исходный сценарий.
  2. Позвольте сценарию распечатать значение и захватитьвывод: variable=$(myScript)
  3. Напишите скрипт как функцию bash внутри вашей .bashrc.

В зависимости от того, что вы хотите сделать, я рекомендую 2. или 3. Сделать3. поместите в файл ~/.bashrc (или ~/.bash_profile, если вы используете Mac OS) следующее, запустите новую оболочку и используйте команду extractFromLastCommit, как если бы это был скрипт.

extractFromLastCommit() {
    export LAST_GIT_COMMIT_MESSAGE=$(
        git log -1 --pretty=%B |
        grep -o '\[[^][]\]' |
        tr -d '\[\]' |
        head -n1 # only take the first "[…]" – remove this line if you want all
    )
}
1 голос
/ 06 ноября 2019

bash my-bash-script.sh

Запускает новый процесс bash, в который экспортируется ваша переменная, затем завершает работу и берет с собой окружение.

source my-bash-script.sh

Выполняетсяскрипт в текущем контексте оболочки и будет иметь желаемый эффект.

...