Искусство программирования на языке сценариев командной оболочки




Программирование на языке сценариев командной оболочки - стр. 347


# Если аргумент prev это -f, то вернуть возможные варианты имен файлов. # будем великодушны и вернем несколько вариантов # `makefile Makefile *.mk' case "$prev" in -*f) COMPREPLY=( $(compgen -f $cur ) ); return 0;; esac

# Если запрошены возможные ключи, то вернуть ключи posix case "$cur" in -) COMPREPLY=(-e -f -i -k -n -p -q -r -S -s -t); return 0;; esac

# попробовать передать make `makefile' перед тем как попробовать передать `Makefile' if [ -f makefile ]; then mdef=makefile elif [ -f Makefile ]; then mdef=Makefile else mdef=*.mk fi

# прежде чем просмотреть "цели", убедиться, что имя makefile было задано # ключом -f for (( i=0; i < ${#COMP_WORDS[@]}; i++ )); do if [[ ${COMP_WORDS[i]} == -*f ]]; then eval makef=${COMP_WORDS[i+1]} break fi done

[ -z "$makef" ] && makef=$mdef

# Если задан шаблон поиска, то ограничиться # этим шаблоном if [ -n "$2" ]; then gcmd='grep "^$2"' ; else gcmd=cat ; fi

# если мы не желаем использовать *.mk, то необходимо убрать cat и использовать # test -f $makef с перенаправлением ввода COMPREPLY=( $(cat $makef 2>/dev/null | awk 'BEGIN {FS=":"} /^[^.# ][^=]*:/ {print $1}' | tr -s ' ' '\012' | sort -u | eval $gcmd ) ) }

complete -F _make_targets -X '+($*|*.[cho])' make gmake pmake

# cvs(1) completion _cvs () { local cur prev COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}

if [ $COMP_CWORD -eq 1 ] || [ "${prev:0:1}" = "-" ]; then COMPREPLY=( $( compgen -W 'add admin checkout commit diff \ export history import log rdiff release remove rtag status \ tag update' $cur )) else COMPREPLY=( $( compgen -f $cur )) fi return 0 } complete -F _cvs cvs

_killall () { local cur prev COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]}

# получить список процессов COMPREPLY=( $( /usr/bin/ps -u $USER -o comm | \ sed -e '1,1d' -e 's#[]\[]##g' -e 's#^.*/##'| \ awk '{if ($0 ~ /^'$cur'/) print $0}' ))

return 0 }

complete -F _killall killall killps




Содержание  Назад  Вперед