Как получить все инструменты, используемые в сценарии оболочки - PullRequest
7 голосов
/ 26 сентября 2011

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

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

Ответы [ 4 ]

2 голосов
/ 26 сентября 2011

Использует sed для перевода каналов и $( для перевода строки, затем использует awk для вывода первого слова строки, если это может быть команда.Каналы в which для поиска потенциальных командных слов в PATH:

sed 's/|\|\$(/\n/g' FILENAME | 
awk '$1~/^#/ {next} $1~/=/ {next} /^[[:space:]]*$/ {next} {print $1}' | 
sort -u | 
xargs which 2>/dev/null
2 голосов
/ 26 сентября 2011

Один из способов сделать это - во время выполнения. Вы можете запустить скрипт bash в режиме отладки с параметром -x и затем проанализировать его вывод. Все выполненные команды плюс их аргументы будут напечатаны на стандартный вывод.

1 голос
/ 26 сентября 2011

Хотя у меня нет общего решения, вы можете попробовать два подхода:

  1. Вы можете использовать strace, чтобы увидеть, какие программы выполнялись вашим сценарием.
  2. Вы можете запустить вашу программув среде pbuilder и посмотрите, какие пакеты отсутствуют.
0 голосов
/ 26 сентября 2011

Из-за динамического характера оболочки вы не можете сделать это без запуска скрипта.

Например:

TASK="cc foo.c"
time $TASK

Это будет действительно трудно определить без запуска этого cc вызывался даже в таком тривиальном примере, как указано выше.

Во время выполнения вы можете проверить отладочный вывод sh -x myscript, как указано thiton (+1) и ks1322 (+1).Вы также можете использовать инструмент strace, чтобы перехватывать все системные вызовы exec().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...