Коды состояния Shell в делают

Точка не является массивом значений, доступ к X, Y, Z - правильный путь.

18
задан Community 23 May 2017 в 12:02
поделиться

5 ответов

Я думаю, что вы ищете переменную оболочки $? , которая дает код выхода предыдущей команды. Например:

$ diff foo.txt foo.txt
$ echo $?
0

Чтобы использовать это в вашем make-файле, вам нужно экранировать $ , как в $$? :

all:
    diff foo.txt foo.txt ; if [ $$? -eq 0 ] ; then echo "no differences" ; fi

Обратите внимание, что каждая команда в вашем правиле Тело в make находится в отдельной подоболочке. Например, следующее не будет работать:

all:
    diff foo.txt foo.txt
    if [ $$? -eq 0 ] ; then echo "no differences" ; fi

, поскольку команды diff и if выполняются в разных процессах оболочки. Если вы хотите использовать выходной статус из команды, вы должны сделать это в контексте той же оболочки, что и в моем предыдущем примере.

37
ответ дан 30 November 2019 в 06:59
поделиться

Использовать '$$?' вместо '$$!' (благодаря 4-му ответу Сценарий оболочки выхода на основе кода выхода процесса )

4
ответ дан 30 November 2019 в 06:59
поделиться

Переменная bash - $? , но почему вы все равно хотите распечатать код состояния?

0
ответ дан 30 November 2019 в 06:59
поделиться

Не забывайте, что каждая из ваших команд выполняется в отдельных подоболочках.

Вот почему вы довольно часто см. что-то вроде:

my_target:
    do something \
    do something else \
    do last thing.

И при отладке не забывайте о каждой полезной опции -n, которая будет печатать команды, но не выполнять их, и опции -p, которая покажет вам полную среду make, включая информацию о различных битах и ​​кусочках.

HTH

приветствия,

3
ответ дан 30 November 2019 в 06:59
поделиться

Попробуйте `\ $? ' Я думаю, что $$ интерпретируется make-файлом

-4
ответ дан 30 November 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: