Хотя bash
версия (2.63) autoconf немного стара (сентябрь 2008), она поддерживает --program-transform-name
и --program-suffix
функции. Печально процесс сборки удара не использует эти функции, как детализировано документацией, и при этом это не использует параметры для разрешения времени изготовления, обрабатывая страниц справочника.
Так как количество файлов и изменений является небольшим, я рекомендую полуручной подход, т.е. пишу маленький сценарий для создания предварительной установки изменений. Можно дополнительно использовать installwatch, чтобы удостовериться, что Вы ловите все во время установки, но bash
действительно довольно минимально. (FWIW, у меня были беглый взгляд на порты удара FreeBSD, и патчи удара Debian, никакой знак подходящей фиксации.)
Обычно будучи интересным способом повредить сборки, можно злоупотребить EXEEXT
здесь:
ac_cv_exeext=42 ./configure [...]
make
./bash42 -c 'echo $BASH_VERSION'
4.2.42(1)-release
начиная со всего это сохранило Вас, было переименовывание, я действительно не рекомендую это ;-)
Существует немного больше, чтобы быть полученным от:
./configure [...]
make -e Program=bash42
поскольку это также отражает Ваше изменение в сгенерированном bashbug
сценарий (хотя это не переименовывает его).
Нет такого инструмента, который я когда-либо видел. Вы можете написать скрипт на различных скриптовых языках, включая Bash, чтобы разобрать вывод из дерева и реконструировать соответствующую директорию на диске, которая бы соответствовала ему. Для просмотра текстового файла потребуется цикл
, в то время как
или для
и использование mkdir
или mkdiir -p
для создания каталога или вложенной структуры каталога, после чего также будет использована команда touch
для создания пустых версий файлов в текстовом файле.
Вы даже можете скопировать временные метки, связанные с mkdir
и touch
, если вы хотите получить структуру полностью скопированную.
] Так как мне это снова понадобилось, я собрал Perl скрипт, который это делает; он оказался несколько сложным, поэтому я выпустил его здесь:[
] [] [] Что он делает, так это анализирует вывод из []-дерева [
] - но, в отличие от примера OP, ему также нужна опция []--dirsfirst[
]. Чтобы не забывать обо всем этом, сначала можно использовать []revrs-tree.pl[
]:[
perl revrs-tree.pl --getdir /usr/include/boost/accumulators/ > test.tree
]
[]... который просто вызовет дерево []-dirsfirst[
] с правильными опциями, которые выводят в stdout - мы перехватываем это в файле []-теста. tree[
].[
] Затем, мы вызываем тот же самый скрипт на этом [] test.tree[
] содержимом; но хитрость в том, что вывод не сами каталоги/файлы - а строки в скрипте [] bash[
], вместо этого, распечатанные в stdout. Вызов выглядит так:[
perl revrs-tree.pl --zerofill test.tree > test-tree.sh
# alternatively, can receive tree text from stdin:
cat test.tree | perl revrs-tree.pl --zerofill > test-tree.sh
]
[]... и []test-tree.sh[
] затем содержит такие вещи как:[
RTD="/usr/include/boost/accumulators";
read -p "WARNING! will output in '$RTD' directory!
Press [Enter] key to start output...";
if [ ! -d "$RTD" ] ; then mkdir "$RTD" ; fi ;
TDIR="$RTD/framework";
mkdir "$TDIR"; sudo chown root:root "$TDIR"; sudo chmod 755 "$TDIR"; sudo touch -d 'Jul 16 2014 9:43:00' "$TDIR";
TDIR="$RTD/framework/accumulators";
mkdir "$TDIR"; sudo chown root:root "$TDIR"; sudo chmod 755 "$TDIR"; sudo touch -d 'Jul 16 2014 9:43:00' "$TDIR";
TFIL="$RTD/framework/accumulators/droppable_accumulator.hpp";
cat /dev/zero | head --bytes 9740 > "$TFIL";
touch -d 'Oct 21 2010 0:00:00' "$TFIL"; sudo chown root:root "$TFIL"; sudo chmod 644 "$TFIL";
...
]
[]Хитрость в том, что:[
] []RTD[
] перед запуском скрипта - я этого ни разу не делал, и мне удалось перезаписать []/usr/include/boost/accumulators[
] файлами с нулевым наполнением! (для чего потребовалось []sudo apt-get удалить --purge libboost1.42-dev && sudo apt-get установить libboost1.42-dev[
] для меня) !!!! (поэтому при запуске скрипт будет ждать пользовательского ввода) ... Допустим, здесь вы изменили его на []/tmp/newtarget[
].[]tree[
] не дает полных временных меток - так что времена обычно устанавливаются в 0[]tree[
], а также усекает uids/gids до каких-то 7 или 8 символов - так что, если у вас больше, чем у них, посмотрите на []. sh[
], и при необходимости замените его.[] Затем, так как случилось, что примером OP был каталог, принадлежащий [] root[
], []. sh[
] скрипт содержит []sudo[
] в соответствующих местах, так что вы можете также называть его как суперпользователь: [
sudo bash test-tree.sh
]
[] После множества распечаток [] set -x[
], скрипт должен закончиться; затем вы можете проверить, правильно ли реконструирована структура дерева каталогов/файлов, скажем, []diff[
] - или []meld[
]:[
meld <(tree -spugD /tmp/newtarget/) <(tree -spugD /usr/include/boost/accumulators/)
]
[] Это не дает мне никакой разницы в выводе [] tree[
] (для данного примера), кроме корневого каталога. [