GNU autotools configure autoreconf

Раскрытие фигурных скобок {1..10} приведет к расширению командной строки для включения нескольких аргументов.

Например, командная строка touch перед выполнением будет расширена до чего-то вроде

touch file.2017.5878.1 file.2017.5878.2 file.2017.5878.3 file.2017.5878.4 file.2017.5878.5 file.2017.5878.6 file.2017.5878.7 file.2017.5878.8 file.2017.5878.9 file.2017.5878.10

. Это нормально, поскольку утилита touch принимает любое количество аргументов в командной строке. Примечание: это создает 10 файлов, а не один файл.

Однако семантика служебной программы mv отличается от семантики touch . Ожидается, что в конце будет один или несколько исходных файлов / каталогов и один целевой файл / каталог.

Это означает, что когда

mv $file $file.$(date +%Y%m).$$.{1..10}

расширяется до чего-то вроде

mv file file.2017.5878.1 file.2017.5878.2 file.2017.5878.3 file.2017.5878.4 file.2017.5878.5 file.2017.5878.6 file.2017.5878.7 file.2017.5878.8 file.2017.5878.9 file.2017.5878.10

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

Мне неясно, что вы на самом деле хотите сделать в этом цикле, поэтому я не могу больше комментировать, как решить эту проблему.

Что касается самого цикла, пожалуйста, никогда не используйте вывод ls в таком виде. Вместо этого выполните

for file in ./*; do
    # process "$file"
done

. Вывод ls предназначен для вас и посмотрите на , он не подходит для использования сценарием по нескольким причинам. См. http://unix.stackexchange.com/questions/128985/why-not-parse-ls

Кроме того, всегда заключайте переменные в двойные кавычки. См. http://unix.stackexchange.com/questions/171346/security-implications-of-forgetting-to-quote-a-variable-in-bash-posix-shells

1
08.07.2017, 13:27
2 ответа

Из справочной страницы autoreconf:

By default, it only remakes those files that are older than their sources. If you install new versions of the GNU Build System, you can make ('autoreconf' remake all of the files by giving it the '--force' option).

Таким образом, кажется, что просто запустив autoreconf -fi, он должен автоматически обновить эти файлы конфигурации

0
28.01.2020, 00:52

Как вы знаете, libtoolize зависает. Иногда в этой проблеме обвиняют autoreconf, но на самом деле проблема строго связана с libtoolize. autoreconf запускает libtoolize, и тогда появляется проблема. Однако простой запуск libtoolize в командной строке сам по себе также демонстрирует проблему.

Различные источники в сети предлагают внести изменения в configure.ac.

# configure.ac  (this does not help)
AC_CONFIG_AUX_DIR([.])

Это не работает.

Другие предлагают сначала создать каталог m4. Это не помогает.

Обходной путь состоит в том, чтобы удалить строку ACLOCAL _AMFLAGS из Makefile.am и просто принять nastygram из libtoolize.

# delete this from Makefile.am
ACLOCAL_AMFLAGS="-I m4"

Если вам действительно нужна строка ACLOCAL _AMFLAGS в Makefile.am, то, ааа..., у вас есть проблема, которую я не могу решить. Удачи.

0
28.01.2020, 00:52

Теги

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