Сгладьтесь сценарий оболочки (включайте полученные сценарии), и удалите неиспользованные функции

Я не имею BSD и никогда не использовал его..., но наверняка log_daemon_message должен быть функцией оболочки. Посмотрите выше этого к операторам как:

.. / функции

Это получает все функции в функциональном файле. Другая вещь, которую можно сделать, состоит в том, чтобы искать определенную функцию с находкой:

найдите / и т.д. - тип f - должностное лицо grep - литий log_daemon_msg {} \;

И посмотрите то, что находится в файлах. Как я сказал, у меня нет BSD, но исследование является забавой!

Аплодисменты и удача

4
05.10.2013, 00:39
2 ответа

Вы могли сделать что-то вроде этого. Я только слегка протестировал его, но я думаю, что общее понятие является звуковым.

Пример

Скажите, что у Вас есть следующий каталог файлов:

$ ls -l
total 16
-rwxrwxr-x 1 saml saml 268 Oct  4 17:44 expander.bash
-rw-rw-r-- 1 saml saml  18 Oct  4 16:49 src_1.bash
-rw-rw-r-- 1 saml saml  20 Oct  4 16:50 src_2.bash
-rwxrwxr-x 1 saml saml 119 Oct  4 16:49 top.bash

top.bash файл похож на это:

$ cat top.bash 
#!/bin/bash

echo "1"
echo "2"
echo "3"
echo "4"

. src_1.bash

echo "15"
echo "16"

. src_2.bash

echo "27"
echo "28"

Вы могли использовать следующий сценарий, expander.bash "расшириться" top.bash:

#!/bin/bash

while read -r line; do
  if echo "$line" | grep -q '\. .*'; then
    file=$(echo "$line" | sed 's/\. //')
    echo "### below sourced from: $file"
    cat $file
    echo "### above sourced from: $file"
    continue
  fi
  printf "%s\n" "$line"
done < top.bash

Выполнение в качестве примера

$ ./expander.bash 
#!/bin/bash

echo "1"
echo "2"
echo "3"
echo "4"

### below sourced from: src_1.bash
echo "6"
echo "7"
### above sourced from: src_1.bash

echo "15"
echo "16"

### below sourced from: src_2.bash
echo "17"
echo "18"
### above sourced from: src_2.bash

echo "27"
echo "28"

Потенциальные улучшения?

Для одного я использовал grep и sed, они могли быть выгружены для создания этого более чистым решением для Bash. Я не не торопился, чтобы сделать это, так как это - грубый прототип.

Второй областью, которой, скорее всего, будет необходимо уделять внимание, является способность к сценариям выяснить, что определение источника другого файла происходит. Шаблон, который обнаруживает это, должны будут, вероятно, "настроить" на основе Вашей ситуации.

2
27.01.2020, 21:00
  • 1
    Не Был бы category-icon- префикс, который Вы добавили, прибывает перед путем к файлу этот путь? Я полагаю, что это закончило бы тем, что пыталось выполнить вещи как mv ./rel/path/to/cateory-icon-blah category-icon-./rel/path/to/ ---------121 А-ч--------124278----, конечно. Я искал существующий инструмент как cpp препроцессор (только для сценариев оболочки, не C), но Ваш ответ показывает, как легкий это должно сделать тот самостоятельно. Я попробую это и другие предложения перед принятием, но это выглядит многообещающим. –  syam 05.10.2013, 01:12
  • 2
    Спасибо, это было довольно полезно (наряду с set -x помочь мне понять, что действительно продолжалось). Для записи время начальной загрузки прошло от 45 перед любой оптимизацией вниз к 11 теперь. Я был бы склонен называть это откровенным успехом. :) –  syam 06.10.2013, 01:09
  • 3
    @syam - спасибо за то, что сообщили нам. Это является потрясающим. Спасибо за вопрос! –  slm♦ 06.10.2013, 01:31
  • 4
    Честно говоря, это было за счет всего модульного принципа: Я "просто" удалил все угловые случаи, которые не относились к моему устройству. Вещь, я являюсь зависящим от ЦП даже перед стать ограниченным диском, таким образом, любое вычисление, которого избегают, является огромной победой (снова, просто удалив определение источника /lib/lsb/init-functions и соответствие log_* вызовы сохраняют.5 к 1 секунде на сценарий, это одно сделало половину задания). Но это показывает, что Debian гибок и может быть оптимизирован довольно много. :) –  syam 06.10.2013, 01:41

Ответ @slm вдохновил меня написать flatten.sh .

flatten.shне будет включать весь исходный файл. Вместо этого он будет извлекать только те функции, определенные в файле, которые фактически используются в выравниваемом скрипте.

Это полезно, если вы храните файл "lazy.lib", который, в свою очередь, содержит ВСЕ функции, которые вы используете. Просто добавьте «lazy.lib» в свой сценарий во время разработки и сгладьте его, когда закончите.

0
27.01.2020, 21:00

Теги

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