Почему я получаю “слишком много аргументов”

Многое из него, покончили autoconf. У меня нет учебного руководства в особенности для рекомендации (вне официальной документации), но Вам будет нужно один и именно это Вы хотите искать. "Autoconf" в разговорной речи относится к комплекту инструментов включая, 'автоделают'.

Я не сделал этого некоторое время, но я попытаюсь изобразить схематически процесс из своих примечаний:

  • Для каждого исходного каталога (не помещают Ваши источники в верхний уровень, помещают их в подкаталоги), необходимо создать a Makefile.am; это следует правилам для нормального make-файла, но не включает цели компиляции и вместо этого определяет некоторые цели и переменные после схемы именования, характерной для процесса autoconf. Это будет обработано automake.

  • На верхнем уровне необходимо создать a configure.ac файл. autoscan инструмент может сделать это для Вас, и затем можно настроить его.

  • Затем необходимо работать в порядке от высокоуровневого каталога: aclocal, automake -ac, autoheader (и возможно automake -ac снова), затем autoconf. Они все имеют страницы справочника, которые объясняют их цель.

Престо! Ваш пакет готов.

действительно ли это - твердая вещь изучить это?

Это определенно утомительно, и я не назвал бы его супер легким, нет. Если Ваш проект является маленьким, и Вы только нацелены на конкретные платформы, Вы могли бы просто придумать собственный скрипт проверки зависимости, который может быть запущен от make-файла.

3
17.10.2014, 02:40
1 ответ

Новые строки без кавычек в командных строках обрабатываются как места; Вот почему вы можете говорить такие вещи, как

command1  &&
command2

Ну, иногда новые строки без кавычек обрабатываются как точки с запятой. Но когда вы говорите

echo `cat ${log}`

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

echo "`cat ${log}`"

, но почему бы просто не сказать

cat ${log}

?

-121--114423-

дата не является bash builtin. Это системная утилита, которая отличается от OSX и Linux. OSX использует инструменты BSD, а Linux - GNU. Они похожи, но не одинаковы.

Как вы обнаружили, на OSX флаг -d на date управляет переходом на летнее время, тогда как в Linux он устанавливает время дисплея. В OSX -v настраивает дату дисплея, но в Linux флаг -v является недопустимым.

По большей части BSD и GNU стремятся к совместимости со стандартом POSIX. Если проверить стандарт POSIX для даты , то вы увидите, что в этом случае это не поможет: он не поддерживает какой-либо синтаксис для корректировки даты.

Если вы хотите, чтобы ваш код работал на обеих платформах, попробуйте:

[ "$(uname)" = Linux ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"

Или (требуется bash):

[ "$OSTYPE" = linux-gnu ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"
-121--53520-

echo «* file 2» | grep -o ^. печать * .

Поскольку у вас есть подстановка команды вне двойных кавычек, она подвергается globbing (a.k.a. подстановочный знак, соответствующий a.k.a. создание имени файла) и разделение слов. Если текущий каталог не пуст, * расширяется до списка файлов в текущем каталоге. Каждый файл становится одним маркером в команде [, что, вероятно, является синтаксической ошибкой.

Проблема в том, что вы не использовали двойные кавычки вокруг подстановки команд. Всегда используйте двойные кавычки вокруг подстановок переменных и команд , если у вас нет веской причины опускать их.

if [ "$(echo "*file 2" | grep -o ^.)" = '.' ]

См. Почему сценарий оболочки подавляется пробелом или другими специальными символами? для более подробного объяснения.

6
27.01.2020, 21:14

Теги

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