Bash 在git钩子中附加多行消息

Bash 在git钩子中附加多行消息,bash,git,sed,Bash,Git,Sed,我正在使用prepare commit messagehook将自定义多行消息附加到我的提交中。此消息来自不同的来源 我的钩子文件内容如下: COMMIT_MSG_FILE=$1 COMMIT_SOURCE=$2 SHA1=$3 MESSAGE=$(some_command) if [ -z ${2+x} ]; then sed -i.back "1s/^/$MESSAGE \n/" "$1" fi 当消息是一行文本时,此功能有效。但当它是多行时,我得到 替换模式内未替换的换行符

我正在使用
prepare commit message
hook将自定义多行消息附加到我的提交中。此消息来自不同的来源

我的钩子文件内容如下:

COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3

MESSAGE=$(some_command)

if [ -z ${2+x} ]; then
    sed -i.back "1s/^/$MESSAGE \n/" "$1"
fi
消息
是一行文本时,此功能有效。但当它是多行时,我得到

替换模式内未替换的换行符

echo$MESSAGE
会给我一些类似的信息:

aaaa
bbbb
基本上,我想做的是,无论何时提交,提交消息都应该包含:

<here i will enter my commit message>

aaaa
bbbb
# Please enter the commit message for your changes. Lines starting
...

aaaa
bbbb
#请输入更改的提交消息。起跑线
...

那里不需要Sed。您应该能够通过以下方式避免所有这些问题:

mv $1 $1.back
(echo $MESSAGE ; cat $1.back) > $1

使用sed,如果不对$MESSAGE中的换行符进行复杂的ANSI-C引用,似乎无法轻松解决该问题,请参见Stack Overflow post。这里不需要sed。您应该能够通过以下方式避免所有这些问题:

mv $1 $1.back
(echo $MESSAGE ; cat $1.back) > $1

使用sed,如果不对$MESSAGE中的换行符进行复杂的ANSI-C引用,似乎无法轻松解决该问题,请参见堆栈溢出post。

MESSAGE=aaa\nbbbb
替换
MESSAGE=$(some_命令)
时会发生什么?在我的bash(v4.4.19)和sed(v4.4)中,在$1文件的开头插入了两行。当您将
MESSAGE=$(some_命令)
替换为
MESSAGE=aaa\nbbbb
时会发生什么?在我的bash(v4.4.19)和sed(v4.4)中,在$1文件的开头插入了两行。