2016-12-21 3 views
0

У меня есть сценарий оболочки более 1000 строк, я хотел бы проверить, установлены ли все команды, используемые в скрипте, в моей операционной системе Linux. Есть ли какой-нибудь инструмент для получения списка команд Linux, используемых в сценарии оболочки? Или как я могу написать небольшой скрипт, который может сделать это для меня?Как получить список команд, используемых в сценарии оболочки?

Скрипт успешно запущен на машине Ubuntu, он вызывается как часть приложения на C++. мы должны запускать то же самое на устройстве, где работает Linux с ограниченными возможностями. Я идентифицировал вручную, несколько команд, которые скрипт запускает и не присутствует в ОС устройства. прежде чем мы попытаемся установить эти команды, я бы хотел проверить все остальные команды и установить все сразу.

Заранее спасибо

+0

Посмотрите: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html – Arek

+0

Или это: http://unix.stackexchange.com/questions/20979/how-do -i-list-all-installed-programs – Michael

+0

Arek Спасибо, это помогает немного, но не совсем то, что я искал. Мне нужно знать, что все команды использует сценарий. Я не могу запустить весь скрипт одним выстрелом, поскольку он выполняется частично по аргументам. на данный момент у нас нет всей информации о аргументах. – Sagar

ответ

0

я уже попробовал это в прошлом, и получил к выводу, что очень трудно обеспечить решение, которое будет работать для всех сценариев. Причина в том, что каждый скрипт с сложными командами имеет другой подход к использованию функций оболочки. В случае простого линейного скрипта это может быть так же просто, как использование режима отладки. Например: bash -x script.sh 2>&1 | grep ^+ | awk '{print $2}' | sort -u В случае, если сценарий имеет некоторые решения, вы можете использовать один и тот же подход, считая, что для случаев «else» команды все равно будут одинаковыми только с разными аргументами или будут что-то тривиальным (echo + exit).

В случае сложного сценария я попытался написать сценарий, который будет просто искать команды в одном и том же месте, где бы я это делал. Задача состоит в том, чтобы создавать выражения, которые помогли бы идентифицировать все использованные возможности, я бы сказал, что это выполнимо для примерно 80-90% скрипта, а вывод должен использоваться только как ссылка, поскольку он будет содержать недопустимые данные (~ 20%).

Вот пример скрипта, который будет анализировать себя, используя очень простой подход (отдельные команды на разных линиях, первое слово будет команда):

# 1. Eliminate all quoted text 
# 2. Eliminate all comments 
# 3. Replace all delimiters between commands with new lines (; | && ||) 
# 4. extract the command from 1st column and print it once 
cat $0 \ 
    | sed -e 's/\"/./g' -e "s/'[^']*'//g" -e 's/"[^"]*"//g' \ 
    | sed -e "s/^[[:space:]]*#.*$//" -e "s/\([^\\]\)#[^\"']*$/\1/" \ 
    | sed -e "s/&&/;/g" -e "s/||/;/g" | tr ";|" "\n\n" \ 
    | awk '{print $1}' | sort -u 

выход:

. 
/
/g. 
awk 
cat 
sed 
sort 
tr 

Есть еще много случаев, чтобы рассмотреть (замены команд, псевдонимы и т. Д.), 1, 2 и 3 только начинаются, но они все равно будут покрывать 80% самых сложных скриптов. Регулярные выражения должны быть скорректированы или расширены для увеличения точности и особых случаев.

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

Смежные вопросы