Как предотвратить запуск команды $ (команда shell) слишком рано - PullRequest
1 голос
/ 15 мая 2019

Я хочу создать файл во время правила make-файла. В конце правила я хочу запустить команду оболочки для файла, используя $(shell xxx) функцию make.

Этоупрощенный пример make-файла для показа проблемы:

test:
        @echo 123 >> file
        @cat file
        @echo "File: $(shell cat file) "

Я ожидал, что в последней строке make-файла будет напечатано: File: 123

Вместо этого похоже, что make запускается $(shell cat file) раньше другихстроки make-файла:

> rm file
> make test
cat: file: No such file or directory
123
File:  

Есть ли какой-нибудь простой способ предотвратить нежелательное поведение и получить следующий вид результата?

> rm file
> make test
123
File: 123 

Ответы [ 3 ]

1 голос
/ 15 мая 2019

Есть ли какой-нибудь простой способ предотвратить нежелательное поведение

Это ожидаемое и задокументированное поведение.Если это не то, что вы хотите, вы не должны использовать $(shell) вообще.

test:
    @echo 123 >> file
    @cat file
    @printf "File: "
    @cat file
1 голос
/ 16 мая 2019

Уберите свои доллары в Makefile и используйте собственный инструмент подпроцесса оболочки, $(command).

test:
    echo "zzz" > z
    echo "$$(cat z)"
1 голос
/ 15 мая 2019

Нет необходимости использовать make синтаксис $(shell ... здесь. Просто используйте последовательность символов `...` для прямого вызова cat ...

test:
        @echo 123 >> file
        @cat file
        @echo "File: "`cat file`

Или, если ваша версия echo поддерживает опцию подавления завершающего перевода строки ...

test:
        @echo 123 >> file
        @cat file
        @echo -n "File: "; cat file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...