GNU Make - как перебрать список с оболочкой?(Необходим TeXLive) - PullRequest
0 голосов
/ 21 сентября 2018

Я хочу получить библиографическую информацию из CTAN, используя ctanbib.

Но вместо того, чтобы писать и выполнять

ctanbib datatool >> MyPackage-ctan.bib
ctanbib biblatex >> MyPackage-ctan.bib
ctanbib archaeologie >> MyPackage-ctan.bib

(и многие другие)

Я думалсделать make file, который бы сделал эту работу.Но он не получит информацию, которая должна быть из-за команды shell.

NAME  = MyPackage
PKG   := datatool biblatex archaeologie
CTAN  := $(shell ctanbib $$pkg >> $(NAME)-ctan.bib)

getCTAN:
    for pkg in $(PKG);\
    do                \
     $(CTAN);         \
    done

1 Ответ

0 голосов
/ 21 сентября 2018

Вы используете макрос $(shell...) make, но не хотите выполнять оценку оболочки.Ваша переменная CTAN устанавливается на результат оценки оболочкой:

ctanbib $pkg >> MyPackage-ctan.bib

Когда я пишу " результат ", я имею в виду то, что эта команда выводит на стандартный вывод,Поскольку, вероятно, не существует переменной оболочки pkg, установленной для оболочки, которая выполняет эту оценку, это, вероятно, совпадает с тем, что оценка оболочки:

ctanbib >> MyPackage-ctan.bib

отправляет на стандартный вывод.А поскольку вы перенаправляете стандартный вывод в файл, это пустая строка.Итак, вашей переменной CTAN назначена пустая строка.

Попробуйте вместо этого:

CTAN := ctanbib $$pkg >> $(NAME)-ctan.bib

.Правая часть назначения будет расширена командой make при назначении переменной make CTAN.В результате будет присвоена переменная CTAN make:

ctanbib $pkg >> MyPackage-ctan.bib

- это то, что вы хотите в своем рецепте после того, как make расширится $(CTAN).Пример с командой ctanlib, заключенной в echo:

$ cat Makefile
NAME  = MyPackage
PKG   := datatool biblatex archaeologie
CTAN  := echo "ctanbib $$pkg >> $(NAME)-ctan.bib"

.PHONY: getCTAN

getCTAN:
    rm -f $(NAME)-ctan.bib
    for pkg in $(PKG);\
    do                \
        $(CTAN);      \
    done
$ make
for pkg in datatool biblatex archaeologie;\
do                \
    echo "ctanbib $pkg >> MyPackage-ctan.bib";      \
done
ctanbib datatool >> MyPackage-ctan.bib
ctanbib biblatex >> MyPackage-ctan.bib
ctanbib archaeologie >> MyPackage-ctan.bib
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...