Одинарные кавычки внутри ваших export
команд читаются как синтаксические, а не литеральные.
Один из способов исправить это - установить строку команды в heredoc в кавычках и развернуть ее позже:
cmd=$(cat <<'EOF'
GIT_AUTHOR_NAME=$(sed -r 's/\<./\U&/g' <<<"$GIT_AUTHOR_NAME")
GIT_AUTHOR_EMAIL=$(sed 's/@[^,]*/@foo.net/' <<<"$GIT_COMMITTER_EMAIL")
GIT_COMMITTER_NAME=$(sed -r 's/\<./\U&/g' <<<"$GIT_AUTHOR_NAME")
GIT_COMMITTER_EMAIL=$(sed 's/@[^,]*/@foo.net/' <<<"$GIT_COMMITTER_EMAIL")
git commit-tree "$@"
EOF
)
git filter-branch --commit-filter "$cmd"
<<'EOF'
используется для предотвращения обработки расширений внутри heredoc до его назначения.
Обратите внимание, что export
s пропало -Оболочка автоматически экспортирует любое обновление в переменную, уже присутствующую в среде, и экспортирует ее в среду перед запуском оболочки, именно так git filter-branch
гарантирует, что значения доступны в первую очередь.