64-битное ядро можно установить на 32-битный Debian. Вы можете увидеть, что ядро amd64 доступно для 32-битного Debian на странице пакета . Это можно использовать в качестве альтернативы использованию ядра с поддержкой PAE для поддержки более 4G общей оперативной памяти. Обратите внимание, что 32-битные двоичные файлы по-прежнему не могут получить доступ к более чем примерно 3 Г ОЗУ на процесс.
Проблема в том, что вместо поиска name
в не -закомментированных данных в file.tx
вы запускаете grep
для исходного файла
grep -v '^#' file.tx | grep -P 'name' file.tx
^^^^^^^
will not read from pipe
Вместо этого используйте
grep -v '^#' file.tx | grep -q 'name'
т. е. не заставляйте второй grep
в конвейере читать из исходного файла. Кроме того, поскольку вас интересует только статус выходаgrep
(для использования в операторе if
), используйте его с -q
.
Принимая во внимание ваш второй вопрос, кажется, если я правильно понимаю, что вы хотите запустить cat file.tx
, только если строка name
присутствует вне комментариев. В этом случае у вас обратная логика.
if grep -v '^#' file.ex | grep -q 'name'; then
Это будет верно, если строка name
встречается в строке без комментария -. Если вы хотите cat
файл, вам нужно сделать это здесь:
if grep -v '^#' file.ex | grep -q 'name'; then \
cat file.tx; \
else \
echo 'No name'; \
fi
Я не уверен в exit 0
, так как это влияет на остальную часть цели Makefile. Если вы хотите, чтобы цель терпела неудачу , если name
отсутствует,затем выполните exit 1
после echo
, в противном случае вообще не выходите (, если у вас нет дополнительного кода оболочки, который вы не хотите выполнять в той же цели Makefile ).
Я тоже заметил твой cd../..
. Если у вас нет file.tx
в текущем каталоге и в каталоге ../..
, cat
вам не удастся. Вы не упомянули, почему вы поднимаетесь на два уровня каталога, поэтому я не могу больше говорить об этом.
Также обратите внимание, что cd
будет «отменено», как только фрагмент оболочки будет завершен, поскольку make
запускает каждую отдельную строку цели в отдельном экземпляре оболочки. Это также означает, что различные set
инструкции, которые у вас есть, выполняются в отдельных оболочках.
Насколько я понял вопрос, у вас есть такой файл:
# a comment with the magic word name
some stuff that does not include the magic word
и вы хотите, чтобы было напечатано «Без имени». Если первая строка была раскомментирована, то «Без имени» не должно быть напечатано.
Следующее должно сделать это:
if grep -v '^#' file.tx | grep -q name; then
echo "no name"
fi
В вашем коде второй grep
включает имя файла, поэтому он не просматривает входные данные из первого. Кроме того, поскольку вы не используете регулярное выражение Perl, я удалил -P
и добавил -q
, чтобы подавить любой вывод, который grep
мог бы вывести, если что-то совпало.