Я пытаюсь сохранить стандартное состояние завершения команды в переменной моего make-файла, но я не знаю, как это сделать.
Я пробовал это:
pruebas:
@A= $(ls)
... но это не работает.
Вы можете выполнить команду в оболочке из Makefile, используя синтаксис $(shell command)
. Например, если вы хотите выйти из состояния команды ls
в bash, введите:
ls --qwfpgjl > /dev/null 2>&1 ; echo $?
Это может потребовать некоторого объяснения: часть > /dev/null 2>&1
перенаправляет как стандартный вывод, так и стандартную ошибку в / dev / null, поэтому вы не видите никакого вывода, а затем 'echo $?' печатает состояние выхода последней команды. Вы можете попробовать это в командной строке, чтобы увидеть, работает ли он для вас, например,
ls --qwfpgjl > /dev/null 2>&1 ; echo $?
должен дать вам
2
, так как это ошибка ls
, когда неизвестный аргумент (см. справочную страницу ls
).
Теперь, как включить это в ваш Makefile? Просто добавьте строку
A=$(shell ls > /dev/null 2>&1 ; echo $?)
в ваш Makefile. Обратите внимание на дополнительный $
в $?
, он говорит make
, что $?
не является переменной в Makefile.
#SHELL := /bin/bash
A=$(shell ls > /dev/null 2>&1 ; echo $? )
test:
@echo $A
.PHONY: test
Примечания:
make
по умолчанию выбирает оболочку /bin/sh
, но вы можете переопределить это, установив
SHELL := /bin/bash
Это может быть полезно для более сложных команд, которые не выполняются в /bin/sh
.