В Баш строке, я могу сделать следующее:Как назначить вывод команды переменной в GNU make target rule?
~/repo$ HISTORY_LOG=$(git log $(get_old_version)..$(get_new_version)); [[ ! -z ${HISTOR_LOG} ]] && (echo "Some header"; echo "${HISTORY_LOG}")
git log
Где это явно упрощенная версия того, что я на самом деле есть.
В косметическом файле я имею следующую команду как часть цели:
$(OUTPUT): $(INPUT)
...
echo "Some header" > $(LOG_FILE)
git log $(shell get_old_version)..$(shell get_new_version) >> $(LOG_FILE)
Как я могу переписать цель грима вести себя подобно команде баш?
Если я следующие строки-фиды раздевание:
$(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 <[email protected]> Date: Mon Jun 25 18:46:27 2012 -0400 Issue #468: This sucker's been sped up.
и то, что я предпочел бы быть:
~/repo $ make
commit 2b4d87b0e64d129028c1a7a0b46ccde2f42c5e93
Author: Jamie <[email protected]>
Date: Mon Jun 25 18:46:27 2012 -0400
Issue #468: This sucker's been sped up.
Я думаю, проблема заключается в том, что make
выполняет команды в /bin/sh
a nd не /bin/bash
. Независимо от того, что я ищу портативное решение, если оно есть.
Есть ли какой-то причине вы хотите назначить выход в переменную? Обратите внимание, что переменная выходит за пределы области действия в конце команды. – Beta
Потому что я хочу добавить преамбулу только в том случае, если вывод не пуст. Команда, генерирующая вывод, немного громоздка, я не хочу дважды помещать ее в файл make. И тот факт, что переменная выходит из области действия в конце команды, является желательной. Редактирование показывает, что заголовок также печатается, если вывод не пуст. – Jamie
GNUMake позволяет вам выбирать оболочку, но не являясь экспертом по оболочке, я бы просто сохранил вывод во временном файле. – Beta