Перевірте залежність сценарію bash / shell


13

Чи є метод / команда для перевірки залежності bash-скрипту? Іншими словами, відповідь на це питання: Які бібліотеки повинен встановити користувач, щоб запустити скрипт?

Я можу це зробити вручну, прочитавши скрипт і перевірити, які інші бібліотеки / команди він викликає, але це не очевидно для довгих сценаріїв.

Відповіді:


8

Неймовірно таємнича система autoconf була використана для

створювати сценарії оболонки для автоматичної настройки пакетів вихідного програмного забезпечення. Ці сценарії можуть адаптувати пакети до багатьох видів UNIX-подібних систем без ручного втручання користувача. Autoconf створює конфігураційний сценарій для пакету з файлу шаблону, в якому перераховані функції операційної системи, якими може користуватися пакет, у вигляді макровикликів M4.

Якщо це недостатньо страшно, зачекайте, поки ви спробуєте написати свій перший сценарій автозапуску. Автори autoconf не соромляться її складності :

Тих, хто не розуміє Autoconf, засуджено винаходити його, погано. Основна мета Autoconf - полегшити життя користувача; полегшити життя обслуговуючого персоналу - лише другорядна мета. По-іншому, головна мета - не зробити генерацію конфігурації автоматичною для обслуговуючого пакета; швидше, мета - зробити конфігурацію безболісною, портативною та передбачуваною для кінцевого споживача кожного автоматично налаштованого пакету. І до цього ступеня Autoconf має високу успішність у своїй меті - більшість скарг до списку Autoconf стосуються труднощів у написанні вводу Autoconf, а не поведінки отриманої конфігурації.

З іншого боку, ви вийдете з процесу, знаючи більше про чудернацькі біти різних систем, ніж ви коли-небудь уявляли.

В наші дні я особисто вважаю, що набагато більш стандартний дистрибутив Debian-ish був моєю ціллю, і не змушувати себе писати ще один сценарій автозапуску. Мені пощастило мати розкіш, щоб обрати це; у вас може не бути такої широти.


3

Це непросте завдання для автоматизації, оскільки сценарій може використовувати конструкції, які перемагають статичний аналіз. Якщо він коли-небудь використовує evalбудь-який префікс на кшталт timeабо nice, він не буде настільки простим, як виконання чогось, як egrep -o '^[^ ]+ ? 'отримати команди і запустити їх через whichабо type.

Зрештою, єдиний спосіб бути абсолютно впевненим - це запустити сценарій і з'ясувати, що не вдається. Якщо сценарій добре написаний, перед запуском він перевірить нестандартні команди. Якщо ні, то проба і помилка - єдиний спосіб бути впевненим.

Сказавши це, щось подібне може допомогти:

#!/bin/bash
egrep -o -e '^[^ ]+ ? ' -e '[a-zA-Z0-9]+' "$1" | sort -u | {
    while read line
    do
        if type $line &>/dev/null
        then
            echo "$line found"
        else
            echo "Error: $line not found"
        fi
    done
} | sort

Вихід буде виглядати так:

$ ./check i_wonder.sh
cd found
echo found
elif found
else found
Error: abort not found
Error: checkurl not found
Error: cleanup not found
Error: count not found
Error: debug not found
Error: deleteFile not found
Error: die not found
find found
for found
grep found
if found
mv found
readarray found
rm found
shopt found
size found
sleep found
stat found
trap found
unset found
while found
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.