0

BASHプロンプトで、次のことができます。

~/repo$ HISTORY_LOG=$(git log $(get_old_version)..$(get_new_version)); [[ ! -z ${HISTOR_LOG} ]] && ( echo "Some header"; echo "${HISTORY_LOG}" )

git log私が実際に持っているものの明らかに単純化されたバージョンはどこにありますか。

makeファイルには、ターゲットの一部として次のコマンドがあります。

$(OUTPUT): $(INPUT)
        ...
        echo "Some header" > $(LOG_FILE)
        git log $(shell get_old_version)..$(shell get_new_version) >> $(LOG_FILE)

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}" )

実行すると次のようになります。

~/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.

そして私が好むのは:

~/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.

問題は、ではなくmakeでコマンドを実行することだと思います。とにかく、ポータブルソリューションがあればそれを探しています。/bin/sh/bin/bash

4

1 に答える 1

5

Make'sshellはあなたの改行を食べています。使用をやめてください。の代わりに$( shell get_old_version )、:をエスケープし$ます

$$( get_old_version )
于 2012-07-03T20:31:23.993 に答える