#!/bin/sh # by ramok@core.org.ua (c) 2006 v. 1.1 # выводит статистику кол-ва использования скриптовых языков в программах вашего PATH # # 0) по ключику -v выводит если где то ошибка в первой строке скрипта # 1) отлавнивает параметр /usr/bin/env что бы показать реальный скриптовый интерпетатор # 2) отлавливает версии, так что python2.3 и python считалось за одно и тоже # 3) отлавливает если скрипт начинается с пустой строки # 4) считает что perl и perl.exe одно и тоже(полезно для Cygwin) # # проверено на Debian, FreeBSD, OpenBSD и Cygwin # VERBOSE=false [ "x$1" = "x-v" ] && VERBOSE=true && shift [ "x$1" = "x-h" ] && printf "Usage: `basename $0` [-h|v]\n -v - verbose output\n -h - this help\n" 1>&2 && exit 0 #set -x IFS=: set $PATH # разбираем PATH на запчасти find $* -exec file "{}" + 2> /dev/null | sed -ne 's/^\([^:]*\):.*script.*/\1/p' | while read PROG; do [ -x $PROG ] || continue SCPT=`sed -ne '/^$/n;s/^#![ ]*\([^ ]*\).*/\1/p;q' $PROG` #пропускаем пустую строку если есть SCPT=`basename $SCPT 2> /dev/null || ($VERBOSE && echo error in first string $PROG 1>&2)` [ -z $SCPT ] && continue # если не скрипт - пропускаем case $SCPT in # отлавливаем /usr/bin/env env) basename `sed -ne '/^$/n;s/^#![ ]*[^ ]* \([^ ]*\).*/\1/p;q' $PROG` || ($VERBOSE && echo error in /usr/bin/env parameter 1>&2);; *) echo $SCPT ;; esac done | sed -e 's/[0-9.-]*$//' | # отрезаем цифры,точки и минусы в конце имени скрипта sed -e 's/\.[Ee][Xx][Ee]$//'| # отрезаем .exe в конце(для cygwin) sort | uniq -c | sort -rn # считаем статистику