2014-11-04 6 views
0

Я не понимаю, что приведенная ниже команда командной строки. Что означает «[! -f»?Что означает «! -f» в файле make?

[ ! -f $(KERNEL_OUT)/drivers/eu.ko ] || \ 
    cp $(KERNEL_OUT)/drivers/eu.ko $(TARGET_OUT)/lib/ 
+1

Команды в файле Makefile являются командами оболочки и (за редким исключением) не предназначены для использования make. В типичной системе (и я имею в виду тот, который использует bash), вы можете запустить 'help [', чтобы найти краткое упоминание о том, что это как команда 'test', и' help test', чтобы найти больше информации , – hvd

+0

спасибо, я знал, что, как-то я думал, что это может быть связано с make –

+0

[команда оценивает условную в соответствии с помощью, эта строка все еще не имеет смысла на мне если файл не существует или скопировать файл в blabla? –

ответ

1

Вы уже выяснили, из документации, которая

[ ! -f $(KERNEL_OUT)/drivers/eu.ko ] 

проверяет, что файл не существует, и вы уже знаете, что

cp $(KERNEL_OUT)/drivers/eu.ko $(TARGET_OUT)/lib/ 

экземпляры файл. Поэтому [ ! -f ... ] || cp ... копирует файл только в том случае, если он существует: его можно прочитать как «файл не существует, иначе файл будет скопирован».

Обычно вы можете написать его как

[ -f ... ] && cp ... 

Однако, если файл не существует, это было бы выйти с не нулевым кодом состояния: код состояния будет равен нулю, только если файл существует и был успешно скопирован. Цель здесь состоит в том, чтобы не рассматривать несуществование файла как условие ошибки, поэтому логика должна быть инвертирована.

+0

спасибо за пояснительный ответ :) –

Смежные вопросы