在BASH提示符下,我可以执行以下操作:
~/repo$ HISTORY_LOG=$(git log $(get_old_version)..$(get_new_version)); [[ ! -z ${HISTOR_LOG} ]] && ( echo "Some header"; echo "${HISTORY_LOG}" )
Run Code Online (Sandbox Code Playgroud)
git log我实际拥有的显示简化版本在哪里.
在make文件中,我将以下命令作为目标的一部分:
$(OUTPUT): $(INPUT)
...
echo "Some header" > $(LOG_FILE)
git log $(shell get_old_version)..$(shell get_new_version) >> $(LOG_FILE)
Run Code Online (Sandbox Code Playgroud)
如何重写make目标以使其像bash命令一样?
如果我这样做,则会删除以下换行符:
$(OUTPUT): $(INPUT)
...
HISTORY_LOG="$(shell git log $(shell get_old_version)..$(shell get_new_version))" ; \
[ -z "$${HISTORY_LOG}" ] && \
true || \
(echo "Some header" ; echo "$${HISTORY_LOG}" )
Run Code Online (Sandbox Code Playgroud)
运行时看起来像:
~/repo $ make
commit 2b4d87b0e64d129028c1a7a0b46ccde2f42c5e93 Author: Jamie <Jamie@mymail.com> Date: Mon Jun 25 18:46:27 2012 -0400 Issue #468: This sucker's been sped up.
Run Code Online (Sandbox Code Playgroud)
而我更喜欢的是:
~/repo $ make
commit 2b4d87b0e64d129028c1a7a0b46ccde2f42c5e93
Author: Jamie <Jamie@mymail.com>
Date: Mon Jun 25 18:46:27 2012 -0400
Issue #468: This sucker's been sped up.
Run Code Online (Sandbox Code Playgroud)
我认为问题在于make执行命令/bin/sh而不执行命令/bin/bash.无论我是否正在寻找便携式解决方案(如果有的话).
Make shell正在吃你的换行.只是停止使用它.而不是$( shell get_old_version )逃避$:
$$( get_old_version )
Run Code Online (Sandbox Code Playgroud)