<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.webko.net.ua/index.php?action=history&amp;feed=atom&amp;title=.bashrc</id>
	<title>.bashrc - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.webko.net.ua/index.php?action=history&amp;feed=atom&amp;title=.bashrc"/>
	<link rel="alternate" type="text/html" href="https://wiki.webko.net.ua/index.php?title=.bashrc&amp;action=history"/>
	<updated>2026-05-21T06:52:50Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.webko.net.ua/index.php?title=.bashrc&amp;diff=58&amp;oldid=prev</id>
		<title>Sol: Новая страница: «Файл ~/.bashrc определяет поведение командной оболочки. Внимательное изучение этого пример…»</title>
		<link rel="alternate" type="text/html" href="https://wiki.webko.net.ua/index.php?title=.bashrc&amp;diff=58&amp;oldid=prev"/>
		<updated>2015-04-19T17:45:14Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «Файл ~/.bashrc определяет поведение командной оболочки. Внимательное изучение этого пример…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Файл ~/.bashrc определяет поведение командной оболочки. Внимательное изучение этого примера поможет вам значительно продвинуться в понимании Bash.&lt;br /&gt;
Внимательно изучите этот файл. Отдельные участки этого файла вы свободно можете использовать в своем собственном .bashrc или, даже в своих сценариях!&lt;br /&gt;
&lt;br /&gt;
[http://tldp.org/LDP/abs/html/sample-bashrc.html .bashrc and .bash_profile]&lt;br /&gt;
[http://www.opennet.ru/docs/RUS/bash_scripting_guide/a15124.html .bashrc]&lt;br /&gt;
&lt;br /&gt;
Пример G-1. Пример файла .bashrc&lt;br /&gt;
&lt;br /&gt;
#===============================================================&lt;br /&gt;
#&lt;br /&gt;
# ЛИЧНЫЙ ФАЙЛ $HOME/.bashrc для bash-2.05a (или выше)&lt;br /&gt;
#&lt;br /&gt;
# Время последней модификации: Втр Апр 15 20:32:34 CEST 2003&lt;br /&gt;
#&lt;br /&gt;
# Этот файл содержит настройки интерактивной командной оболочки.&lt;br /&gt;
# Здесь размещены определения псевдонимов, функций&lt;br /&gt;
# и других элементов Bash, таких как prompt (приглашение к вводу).&lt;br /&gt;
#&lt;br /&gt;
# Изначально, этот файл был создан в операционной системе Solaris,&lt;br /&gt;
# но позднее был переделан под Redhat&lt;br /&gt;
# --&amp;gt; Модифицирован под Linux.&lt;br /&gt;
# Большая часть кода, который находится здесь, была взята из&lt;br /&gt;
# Usenet (или Интернет).&lt;br /&gt;
# Этот файл содержит слишком много определений -- помните, это всего лишь пример.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#===============================================================&lt;br /&gt;
&lt;br /&gt;
# --&amp;gt; Комментарии, добавленные автором HOWTO.&lt;br /&gt;
# --&amp;gt; И дополнены автором сценария Emmanuel Rouat :-)&lt;br /&gt;
&lt;br /&gt;
#-----------------------------------&lt;br /&gt;
# Глобальные определения&lt;br /&gt;
#-----------------------------------&lt;br /&gt;
&lt;br /&gt;
if [ -f /etc/bashrc ]; then&lt;br /&gt;
        . /etc/bashrc   # --&amp;gt; Прочитать настройки из /etc/bashrc, если таковой имеется.&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------------&lt;br /&gt;
# Настройка переменной $DISPLAY (если еще не установлена)&lt;br /&gt;
# Это срабатывает под linux - в вашем случае все может быть по другому....&lt;br /&gt;
# Проблема в том, что различные типы терминалов&lt;br /&gt;
# дают разные ответы на запрос 'who am i'......&lt;br /&gt;
# я не нашел 'универсального' метода&lt;br /&gt;
#-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function get_xserver ()&lt;br /&gt;
{&lt;br /&gt;
    case $TERM in&lt;br /&gt;
        xterm )&lt;br /&gt;
            XSERVER=$(who am i | awk '{print $NF}' | tr -d ')''(' )&lt;br /&gt;
            XSERVER=${XSERVER%%:*}&lt;br /&gt;
            ;;&lt;br /&gt;
        aterm | rxvt)&lt;br /&gt;
        # добавьте здесь свой код.....&lt;br /&gt;
            ;;&lt;br /&gt;
    esac&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -z ${DISPLAY:=&amp;quot;&amp;quot;} ]; then&lt;br /&gt;
    get_xserver&lt;br /&gt;
    if [[ -z ${XSERVER}  || ${XSERVER} == $(hostname) || ${XSERVER} == &amp;quot;unix&amp;quot; ]]; then&lt;br /&gt;
        DISPLAY=&amp;quot;:0.0&amp;quot;          # для локального хоста&lt;br /&gt;
    else&lt;br /&gt;
        DISPLAY=${XSERVER}:0.0  # для удаленного хоста&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
export DISPLAY&lt;br /&gt;
&lt;br /&gt;
#---------------&lt;br /&gt;
# Некоторые настройки&lt;br /&gt;
#---------------&lt;br /&gt;
&lt;br /&gt;
ulimit -S -c 0          # Запрет на создание файлов coredump&lt;br /&gt;
set -o notify&lt;br /&gt;
set -o noclobber&lt;br /&gt;
set -o ignoreeof&lt;br /&gt;
set -o nounset&lt;br /&gt;
#set -o xtrace          # полезно для отладки&lt;br /&gt;
&lt;br /&gt;
# Разрешающие настройки:&lt;br /&gt;
shopt -s cdspell&lt;br /&gt;
shopt -s cdable_vars&lt;br /&gt;
shopt -s checkhash&lt;br /&gt;
shopt -s checkwinsize&lt;br /&gt;
shopt -s mailwarn&lt;br /&gt;
shopt -s sourcepath&lt;br /&gt;
shopt -s no_empty_cmd_completion  # только для bash&amp;gt;=2.04&lt;br /&gt;
shopt -s cmdhist&lt;br /&gt;
shopt -s histappend histreedit histverify&lt;br /&gt;
shopt -s extglob&lt;br /&gt;
&lt;br /&gt;
# Запрещающие настройки:&lt;br /&gt;
shopt -u mailwarn&lt;br /&gt;
unset MAILCHECK         # Я не желаю, чтобы командная оболочка сообщала мне о прибытии почты&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
export TIMEFORMAT=$'\nreal %3R\tuser %3U\tsys %3S\tpcpu %P\n'&lt;br /&gt;
export HISTIGNORE=&amp;quot;&amp;amp;:bg:fg:ll:h&amp;quot;&lt;br /&gt;
export HOSTFILE=$HOME/.hosts    # Поместить список удаленных хостов в файл ~/.hosts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#-----------------------&lt;br /&gt;
# Greeting, motd etc...&lt;br /&gt;
#-----------------------&lt;br /&gt;
&lt;br /&gt;
# Для начала определить некоторые цвета:&lt;br /&gt;
red='\e[0;31m'&lt;br /&gt;
RED='\e[1;31m'&lt;br /&gt;
blue='\e[0;34m'&lt;br /&gt;
BLUE='\e[1;34m'&lt;br /&gt;
cyan='\e[0;36m'&lt;br /&gt;
CYAN='\e[1;36m'&lt;br /&gt;
NC='\e[0m'              # No Color (нет цвета)&lt;br /&gt;
# --&amp;gt; Прекрасно. Имеет тот же эффект, что и &amp;quot;ansi.sys&amp;quot; в DOS.&lt;br /&gt;
&lt;br /&gt;
# Лучше выглядит на черном фоне.....&lt;br /&gt;
echo -e &amp;quot;${CYAN}This is BASH ${RED}${BASH_VERSION%.*}${CYAN} - DISPLAY on ${RED}$DISPLAY${NC}\n&amp;quot;&lt;br /&gt;
date&lt;br /&gt;
if [ -x /usr/games/fortune ]; then&lt;br /&gt;
    /usr/games/fortune -s     # сделает наш день более интересным.... :-)&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
function _exit()        # функция, запускающаяся при выходе из оболочки&lt;br /&gt;
{&lt;br /&gt;
    echo -e &amp;quot;${RED}Аста ла виста, бэби ${NC}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap _exit EXIT&lt;br /&gt;
&lt;br /&gt;
#---------------&lt;br /&gt;
# Prompt&lt;br /&gt;
#---------------&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;${DISPLAY#$HOST}&amp;quot; != &amp;quot;:0.0&amp;quot; &amp;amp;&amp;amp;  &amp;quot;${DISPLAY}&amp;quot; != &amp;quot;:0&amp;quot; ]]; then&lt;br /&gt;
    HILIT=${red}   # на удаленной системе: prompt будет частично красным&lt;br /&gt;
else&lt;br /&gt;
    HILIT=${cyan}  # на локальной системе: prompt будет частично циановым&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#  --&amp;gt; Замените \W на \w в функциях ниже&lt;br /&gt;
#+ --&amp;gt; чтобы видеть в оболочке полный путь к текущему каталогу.&lt;br /&gt;
&lt;br /&gt;
function fastprompt()&lt;br /&gt;
{&lt;br /&gt;
    unset PROMPT_COMMAND&lt;br /&gt;
    case $TERM in&lt;br /&gt;
        *term | rxvt )&lt;br /&gt;
            PS1=&amp;quot;${HILIT}[\h]$NC \W &amp;gt; \[\033]0;\${TERM} [\u@\h] \w\007\]&amp;quot; ;;&lt;br /&gt;
        linux )&lt;br /&gt;
            PS1=&amp;quot;${HILIT}[\h]$NC \W &amp;gt; &amp;quot; ;;&lt;br /&gt;
        *)&lt;br /&gt;
            PS1=&amp;quot;[\h] \W &amp;gt; &amp;quot; ;;&lt;br /&gt;
    esac&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function powerprompt()&lt;br /&gt;
{&lt;br /&gt;
    _powerprompt()&lt;br /&gt;
    {&lt;br /&gt;
        LOAD=$(uptime|sed -e &amp;quot;s/.*: \([^,]*\).*/\1/&amp;quot; -e &amp;quot;s/ //g&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    PROMPT_COMMAND=_powerprompt&lt;br /&gt;
    case $TERM in&lt;br /&gt;
        *term | rxvt  )&lt;br /&gt;
            PS1=&amp;quot;${HILIT}[\A \$LOAD]$NC\n[\h \#] \W &amp;gt; \[\033]0;\${TERM} [\u@\h] \w\007\]&amp;quot; ;;&lt;br /&gt;
        linux )&lt;br /&gt;
            PS1=&amp;quot;${HILIT}[\A - \$LOAD]$NC\n[\h \#] \w &amp;gt; &amp;quot; ;;&lt;br /&gt;
        * )&lt;br /&gt;
            PS1=&amp;quot;[\A - \$LOAD]\n[\h \#] \w &amp;gt; &amp;quot; ;;&lt;br /&gt;
    esac&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
powerprompt     # это prompt по-умолчанию - может работать довольно медленно&lt;br /&gt;
                # Если это так, то используйте fastprompt....&lt;br /&gt;
&lt;br /&gt;
#===============================================================&lt;br /&gt;
#&lt;br /&gt;
# ПСЕВДОНИМЫ И ФУНКЦИИ&lt;br /&gt;
#&lt;br /&gt;
# Возможно некоторые из функций, приведенных здесь, окажутся для вас слишком большими,&lt;br /&gt;
# но на моей рабочей станции установлено 512Mb ОЗУ, так что.....&lt;br /&gt;
# Если пожелаете уменьшить размер этого файла, то можете оформить эти функции&lt;br /&gt;
# в виде отдельных сценариев.&lt;br /&gt;
#&lt;br /&gt;
# Большинство функций были взяты, почти без переделки, из примеров&lt;br /&gt;
# к bash-2.04.&lt;br /&gt;
#&lt;br /&gt;
#===============================================================&lt;br /&gt;
&lt;br /&gt;
#-------------------&lt;br /&gt;
# Псевдонимы&lt;br /&gt;
#-------------------&lt;br /&gt;
&lt;br /&gt;
alias rm='rm -i'&lt;br /&gt;
alias cp='cp -i'&lt;br /&gt;
alias mv='mv -i'&lt;br /&gt;
# -&amp;gt; Предотвращает случайное удаление файлов.&lt;br /&gt;
alias mkdir='mkdir -p'&lt;br /&gt;
&lt;br /&gt;
alias h='history'&lt;br /&gt;
alias j='jobs -l'&lt;br /&gt;
alias r='rlogin'&lt;br /&gt;
alias which='type -all'&lt;br /&gt;
alias ..='cd ..'&lt;br /&gt;
alias path='echo -e ${PATH//:/\\n}'&lt;br /&gt;
alias print='/usr/bin/lp -o nobanner -d $LPDEST'   # Предполагается, что LPDEST определен&lt;br /&gt;
alias pjet='enscript -h -G -fCourier9 -d $LPDEST'  # Печать через enscript&lt;br /&gt;
alias background='xv -root -quit -max -rmode 5'    # Положить картинку в качестве фона&lt;br /&gt;
alias du='du -kh'&lt;br /&gt;
alias df='df -kTh'&lt;br /&gt;
&lt;br /&gt;
# Различные варианты 'ls' (предполагается, что установлена GNU-версия ls)&lt;br /&gt;
alias la='ls -Al'               # показать скрытые файлы&lt;br /&gt;
alias ls='ls -hF --color'       # выделить различные типы файлов цветом&lt;br /&gt;
alias lx='ls -lXB'              # сортировка по расширению&lt;br /&gt;
alias lk='ls -lSr'              # сортировка по размеру&lt;br /&gt;
alias lc='ls -lcr'              # сортировка по времени изменения&lt;br /&gt;
alias lu='ls -lur'              # сортировка по времени последнего обращения&lt;br /&gt;
alias lr='ls -lR'               # рекурсивный обход подкаталогов&lt;br /&gt;
alias lt='ls -ltr'              # сортировка по дате&lt;br /&gt;
alias lm='ls -al |more'         # вывод через 'more'&lt;br /&gt;
alias tree='tree -Csu'          # альтернатива 'ls'&lt;br /&gt;
&lt;br /&gt;
# подготовка 'less'&lt;br /&gt;
alias more='less'&lt;br /&gt;
export PAGER=less&lt;br /&gt;
export LESSCHARSET='latin1'&lt;br /&gt;
export LESSOPEN='|/usr/bin/lesspipe.sh %s 2&amp;gt;&amp;amp;-' # если существует lesspipe.sh&lt;br /&gt;
export LESS='-i -N -w  -z-4 -g -e -M -X -F -R -P%t?f%f \&lt;br /&gt;
:stdin .?pb%pb\%:?lbLine %lb:?bbByte %bb:-...'&lt;br /&gt;
&lt;br /&gt;
# проверка правописания - настоятельно рекомендую :-)&lt;br /&gt;
alias xs='cd'&lt;br /&gt;
alias vf='cd'&lt;br /&gt;
alias moer='more'&lt;br /&gt;
alias moew='more'&lt;br /&gt;
alias kk='ll'&lt;br /&gt;
&lt;br /&gt;
#----------------&lt;br /&gt;
# добавим немножко &amp;quot;приятностей&amp;quot;&lt;br /&gt;
#----------------&lt;br /&gt;
&lt;br /&gt;
function xtitle ()&lt;br /&gt;
{&lt;br /&gt;
    case &amp;quot;$TERM&amp;quot; in&lt;br /&gt;
        *term | rxvt)&lt;br /&gt;
            echo -n -e &amp;quot;\033]0;$*\007&amp;quot; ;;&lt;br /&gt;
        *)&lt;br /&gt;
            ;;&lt;br /&gt;
    esac&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# псевдонимы...&lt;br /&gt;
alias top='xtitle Processes on $HOST &amp;amp;&amp;amp; top'&lt;br /&gt;
alias make='xtitle Making $(basename $PWD) ; make'&lt;br /&gt;
alias ncftp=&amp;quot;xtitle ncFTP ; ncftp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# .. и функции&lt;br /&gt;
function man ()&lt;br /&gt;
{&lt;br /&gt;
    for i ; do&lt;br /&gt;
        xtitle The $(basename $1|tr -d .[:digit:]) manual&lt;br /&gt;
        command man -F -a &amp;quot;$i&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ll(){ ls -l &amp;quot;$@&amp;quot;| egrep &amp;quot;^d&amp;quot; ; ls -lXB &amp;quot;$@&amp;quot; 2&amp;gt;&amp;amp;-| egrep -v &amp;quot;^d|total &amp;quot;; }&lt;br /&gt;
function te()  # &amp;quot;обертка&amp;quot; вокруг xemacs/gnuserv&lt;br /&gt;
{&lt;br /&gt;
    if [ &amp;quot;$(gnuclient -batch -eval t 2&amp;gt;&amp;amp;-)&amp;quot; == &amp;quot;t&amp;quot; ]; then&lt;br /&gt;
        gnuclient -q &amp;quot;$@&amp;quot;;&lt;br /&gt;
    else&lt;br /&gt;
        ( xemacs &amp;quot;$@&amp;quot; &amp;amp;);&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#-----------------------------------&lt;br /&gt;
# Функции для работы с файлами и строками:&lt;br /&gt;
#-----------------------------------&lt;br /&gt;
&lt;br /&gt;
# Поиск файла по шаблону:&lt;br /&gt;
function ff() { find . -type f -iname '*'$*'*' -ls ; }&lt;br /&gt;
# Поиск файла по шаблону в $1 и запуск команды в $2 с ним:&lt;br /&gt;
function fe() { find . -type f -iname '*'$1'*' -exec &amp;quot;${2:-file}&amp;quot; {} \;  ; }&lt;br /&gt;
# поиск строки по файлам:&lt;br /&gt;
function fstr()&lt;br /&gt;
{&lt;br /&gt;
    OPTIND=1&lt;br /&gt;
    local case=&amp;quot;&amp;quot;&lt;br /&gt;
    local usage=&amp;quot;fstr: поиск строки в файлах.&lt;br /&gt;
Порядок использования: fstr [-i] \&amp;quot;шаблон\&amp;quot; [\&amp;quot;шаблон_имени_файла\&amp;quot;] &amp;quot;&lt;br /&gt;
    while getopts :it opt&lt;br /&gt;
    do&lt;br /&gt;
        case &amp;quot;$opt&amp;quot; in&lt;br /&gt;
        i) case=&amp;quot;-i &amp;quot; ;;&lt;br /&gt;
        *) echo &amp;quot;$usage&amp;quot;; return;;&lt;br /&gt;
        esac&lt;br /&gt;
    done&lt;br /&gt;
    shift $(( $OPTIND - 1 ))&lt;br /&gt;
    if [ &amp;quot;$#&amp;quot; -lt 1 ]; then&lt;br /&gt;
        echo &amp;quot;$usage&amp;quot;&lt;br /&gt;
        return;&lt;br /&gt;
    fi&lt;br /&gt;
    local SMSO=$(tput smso)&lt;br /&gt;
    local RMSO=$(tput rmso)&lt;br /&gt;
    find . -type f -name &amp;quot;${2:-*}&amp;quot; -print0 | xargs -0 grep -sn ${case} &amp;quot;$1&amp;quot; 2&amp;gt;&amp;amp;- | \&lt;br /&gt;
sed &amp;quot;s/$1/${SMSO}\0${RMSO}/gI&amp;quot; | more&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function cuttail() # удалить последние n строк в файле, по-умолчанию 10&lt;br /&gt;
{&lt;br /&gt;
    nlines=${2:-10}&lt;br /&gt;
    sed -n -e :a -e &amp;quot;1,${nlines}!{P;N;D;};N;ba&amp;quot; $1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function lowercase()  # перевести имя файла в нижний регистр&lt;br /&gt;
{&lt;br /&gt;
    for file ; do&lt;br /&gt;
        filename=${file##*/}&lt;br /&gt;
        case &amp;quot;$filename&amp;quot; in&lt;br /&gt;
        */*) dirname==${file%/*} ;;&lt;br /&gt;
        *) dirname=.;;&lt;br /&gt;
        esac&lt;br /&gt;
        nf=$(echo $filename | tr A-Z a-z)&lt;br /&gt;
        newname=&amp;quot;${dirname}/${nf}&amp;quot;&lt;br /&gt;
        if [ &amp;quot;$nf&amp;quot; != &amp;quot;$filename&amp;quot; ]; then&lt;br /&gt;
            mv &amp;quot;$file&amp;quot; &amp;quot;$newname&amp;quot;&lt;br /&gt;
            echo &amp;quot;lowercase: $file --&amp;gt; $newname&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            echo &amp;quot;lowercase: имя файла $file не было изменено.&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
    done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function swap()         # меняет 2 файла местами&lt;br /&gt;
{&lt;br /&gt;
    local TMPFILE=tmp.$$&lt;br /&gt;
    mv &amp;quot;$1&amp;quot; $TMPFILE&lt;br /&gt;
    mv &amp;quot;$2&amp;quot; &amp;quot;$1&amp;quot;&lt;br /&gt;
    mv $TMPFILE &amp;quot;$2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#-----------------------------------&lt;br /&gt;
# Функции для работы с процессами/системой:&lt;br /&gt;
#-----------------------------------&lt;br /&gt;
&lt;br /&gt;
function my_ps() { ps $@ -u $USER -o pid,%cpu,%mem,bsdtime,command ; }&lt;br /&gt;
function pp() { my_ps f | awk '!/awk/ &amp;amp;&amp;amp; $0~var' var=${1:-&amp;quot;.*&amp;quot;} ; }&lt;br /&gt;
&lt;br /&gt;
# Эта функция является грубым аналогом 'killall' в linux&lt;br /&gt;
# но не эквивалентна (насколько я знаю) 'killall' в Solaris&lt;br /&gt;
function killps()   # &amp;quot;Прибить&amp;quot; процесс по его имени&lt;br /&gt;
{&lt;br /&gt;
    local pid pname sig=&amp;quot;-TERM&amp;quot;   # сигнал, рассылаемый по-умолчанию&lt;br /&gt;
    if [ &amp;quot;$#&amp;quot; -lt 1 ] || [ &amp;quot;$#&amp;quot; -gt 2 ]; then&lt;br /&gt;
        echo &amp;quot;Порядок использования: killps [-SIGNAL] шаблон_имени_процесса&amp;quot;&lt;br /&gt;
        return;&lt;br /&gt;
    fi&lt;br /&gt;
    if [ $# = 2 ]; then sig=$1 ; fi&lt;br /&gt;
    for pid in $(my_ps| awk '!/awk/ &amp;amp;&amp;amp; $0~pat { print $1 }' pat=${!#} ) ; do&lt;br /&gt;
        pname=$(my_ps | awk '$1~var { print $5 }' var=$pid )&lt;br /&gt;
        if ask &amp;quot;Послать сигнал $sig процессу $pid &amp;lt;$pname&amp;gt;?&amp;quot;&lt;br /&gt;
            then kill $sig $pid&lt;br /&gt;
        fi&lt;br /&gt;
    done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function my_ip() # IP адрес&lt;br /&gt;
{&lt;br /&gt;
    MY_IP=$(/sbin/ifconfig ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)&lt;br /&gt;
    MY_ISP=$(/sbin/ifconfig ppp0 | awk '/P-t-P/ { print $3 } ' | sed -e s/P-t-P://)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ii()   # Дополнительные сведения о системе&lt;br /&gt;
{&lt;br /&gt;
    echo -e &amp;quot;\nВы находитесь на ${RED}$HOST&amp;quot;&lt;br /&gt;
    echo -e &amp;quot;\nДополнительная информация:$NC &amp;quot; ; uname -a&lt;br /&gt;
    echo -e &amp;quot;\n${RED}В системе работают пользователи:$NC &amp;quot; ; w -h&lt;br /&gt;
    echo -e &amp;quot;\n${RED}Дата:$NC &amp;quot; ; date&lt;br /&gt;
    echo -e &amp;quot;\n${RED}Время, прошедшее с момента последней перезагрузки :$NC &amp;quot; ; uptime&lt;br /&gt;
    echo -e &amp;quot;\n${RED}Память :$NC &amp;quot; ; free&lt;br /&gt;
    my_ip 2&amp;gt;&amp;amp;- ;&lt;br /&gt;
    echo -e &amp;quot;\n${RED}IP адрес:$NC&amp;quot; ; echo ${MY_IP:-&amp;quot;Соединение не установлено&amp;quot;}&lt;br /&gt;
    echo -e &amp;quot;\n${RED}Адрес провайдера (ISP):$NC&amp;quot; ; echo ${MY_ISP:-&amp;quot;Соединение не установлено&amp;quot;}&lt;br /&gt;
    echo&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Разные утилиты:&lt;br /&gt;
&lt;br /&gt;
function repeat()       # повторить команду n раз&lt;br /&gt;
{&lt;br /&gt;
    local i max&lt;br /&gt;
    max=$1; shift;&lt;br /&gt;
    for ((i=1; i &amp;lt;= max ; i++)); do  # --&amp;gt; C-подобный синтаксис&lt;br /&gt;
        eval &amp;quot;$@&amp;quot;;&lt;br /&gt;
    done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ask()&lt;br /&gt;
{&lt;br /&gt;
    echo -n &amp;quot;$@&amp;quot; '[y/n] ' ; read ans&lt;br /&gt;
    case &amp;quot;$ans&amp;quot; in&lt;br /&gt;
        y*|Y*) return 0 ;;&lt;br /&gt;
        *) return 1 ;;&lt;br /&gt;
    esac&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#=========================================================================&lt;br /&gt;
#&lt;br /&gt;
# ПРОГРАММНЫЕ ДОПОЛНЕНИЯ - ТОЛЬКО НАЧИНАЯ С ВЕРСИИ BASH-2.04&lt;br /&gt;
# Большая часть дополнений взята из докуентации к bash 2.05  и из&lt;br /&gt;
# пакета 'Bash completion' (http://www.caliban.org/bash/index.shtml#completion)&lt;br /&gt;
# автор -- Ian McDonalds&lt;br /&gt;
# Фактически, у вас должен стоять bash-2.05a&lt;br /&gt;
#&lt;br /&gt;
#=========================================================================&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;${BASH_VERSION%.*}&amp;quot; \&amp;lt; &amp;quot;2.05&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Вам необходимо обновиться до версии 2.05&amp;quot;&lt;br /&gt;
    return&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
shopt -s extglob        # необходимо&lt;br /&gt;
set +o nounset          # иначе некоторые дополнения не будут работать&lt;br /&gt;
&lt;br /&gt;
complete -A hostname   rsh rcp telnet rlogin r ftp ping disk&lt;br /&gt;
complete -A export     printenv&lt;br /&gt;
complete -A variable   export local readonly unset&lt;br /&gt;
complete -A enabled    builtin&lt;br /&gt;
complete -A alias      alias unalias&lt;br /&gt;
complete -A function   function&lt;br /&gt;
complete -A user       su mail finger&lt;br /&gt;
&lt;br /&gt;
complete -A helptopic  help&lt;br /&gt;
complete -A shopt      shopt&lt;br /&gt;
complete -A stopped -P '%' bg&lt;br /&gt;
complete -A job -P '%'     fg jobs disown&lt;br /&gt;
&lt;br /&gt;
complete -A directory  mkdir rmdir&lt;br /&gt;
complete -A directory   -o default cd&lt;br /&gt;
&lt;br /&gt;
# Архивация&lt;br /&gt;
complete -f -o default -X '*.+(zip|ZIP)'  zip&lt;br /&gt;
complete -f -o default -X '!*.+(zip|ZIP)' unzip&lt;br /&gt;
complete -f -o default -X '*.+(z|Z)'      compress&lt;br /&gt;
complete -f -o default -X '!*.+(z|Z)'     uncompress&lt;br /&gt;
complete -f -o default -X '*.+(gz|GZ)'    gzip&lt;br /&gt;
complete -f -o default -X '!*.+(gz|GZ)'   gunzip&lt;br /&gt;
complete -f -o default -X '*.+(bz2|BZ2)'  bzip2&lt;br /&gt;
complete -f -o default -X '!*.+(bz2|BZ2)' bunzip2&lt;br /&gt;
# Postscript,pdf,dvi.....&lt;br /&gt;
complete -f -o default -X '!*.ps'  gs ghostview ps2pdf ps2ascii&lt;br /&gt;
complete -f -o default -X '!*.dvi' dvips dvipdf xdvi dviselect dvitype&lt;br /&gt;
complete -f -o default -X '!*.pdf' acroread pdf2ps&lt;br /&gt;
complete -f -o default -X '!*.+(pdf|ps)' gv&lt;br /&gt;
complete -f -o default -X '!*.texi*' makeinfo texi2dvi texi2html texi2pdf&lt;br /&gt;
complete -f -o default -X '!*.tex' tex latex slitex&lt;br /&gt;
complete -f -o default -X '!*.lyx' lyx&lt;br /&gt;
complete -f -o default -X '!*.+(htm*|HTM*)' lynx html2ps&lt;br /&gt;
# Multimedia&lt;br /&gt;
complete -f -o default -X '!*.+(jp*g|gif|xpm|png|bmp)' xv gimp&lt;br /&gt;
complete -f -o default -X '!*.+(mp3|MP3)' mpg123 mpg321&lt;br /&gt;
complete -f -o default -X '!*.+(ogg|OGG)' ogg123&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
complete -f -o default -X '!*.pl'  perl perl5&lt;br /&gt;
&lt;br /&gt;
# Эти 'универсальные' дополнения работают тогда, когда команды вызываются&lt;br /&gt;
# с, так называемыми, 'длинными ключами', например: 'ls --all' вместо 'ls -a'&lt;br /&gt;
&lt;br /&gt;
_get_longopts ()&lt;br /&gt;
{&lt;br /&gt;
    $1 --help | sed  -e '/--/!d' -e 's/.*--\([^[:space:].,]*\).*/--\1/'| \&lt;br /&gt;
grep ^&amp;quot;$2&amp;quot; |sort -u ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_longopts_func ()&lt;br /&gt;
{&lt;br /&gt;
    case &amp;quot;${2:-*}&amp;quot; in&lt;br /&gt;
        -*)     ;;&lt;br /&gt;
        *)      return ;;&lt;br /&gt;
    esac&lt;br /&gt;
&lt;br /&gt;
    case &amp;quot;$1&amp;quot; in&lt;br /&gt;
        \~*)    eval cmd=&amp;quot;$1&amp;quot; ;;&lt;br /&gt;
        *)      cmd=&amp;quot;$1&amp;quot; ;;&lt;br /&gt;
    esac&lt;br /&gt;
    COMPREPLY=( $(_get_longopts ${1} ${2} ) )&lt;br /&gt;
}&lt;br /&gt;
complete  -o default -F _longopts_func configure bash&lt;br /&gt;
complete  -o default -F _longopts_func wget id info a2ps ls recode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
_make_targets ()&lt;br /&gt;
{&lt;br /&gt;
    local mdef makef gcmd cur prev i&lt;br /&gt;
&lt;br /&gt;
    COMPREPLY=()&lt;br /&gt;
    cur=${COMP_WORDS[COMP_CWORD]}&lt;br /&gt;
    prev=${COMP_WORDS[COMP_CWORD-1]}&lt;br /&gt;
&lt;br /&gt;
    # Если аргумент prev это -f, то вернуть возможные варианты имен файлов.&lt;br /&gt;
    # будем великодушны и вернем несколько вариантов&lt;br /&gt;
    # `makefile Makefile *.mk'&lt;br /&gt;
    case &amp;quot;$prev&amp;quot; in&lt;br /&gt;
        -*f)    COMPREPLY=( $(compgen -f $cur ) ); return 0;;&lt;br /&gt;
    esac&lt;br /&gt;
&lt;br /&gt;
    # Если запрошены возможные ключи, то вернуть ключи posix&lt;br /&gt;
    case &amp;quot;$cur&amp;quot; in&lt;br /&gt;
        -)      COMPREPLY=(-e -f -i -k -n -p -q -r -S -s -t); return 0;;&lt;br /&gt;
    esac&lt;br /&gt;
&lt;br /&gt;
    # попробовать передать make `makefile' перед тем как попробовать передать `Makefile'&lt;br /&gt;
    if [ -f makefile ]; then&lt;br /&gt;
        mdef=makefile&lt;br /&gt;
    elif [ -f Makefile ]; then&lt;br /&gt;
        mdef=Makefile&lt;br /&gt;
    else&lt;br /&gt;
        mdef=*.mk&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # прежде чем просмотреть &amp;quot;цели&amp;quot;, убедиться, что имя makefile было задано&lt;br /&gt;
    # ключом -f&lt;br /&gt;
    for (( i=0; i &amp;lt; ${#COMP_WORDS[@]}; i++ )); do&lt;br /&gt;
        if [[ ${COMP_WORDS[i]} == -*f ]]; then&lt;br /&gt;
            eval makef=${COMP_WORDS[i+1]}&lt;br /&gt;
            break&lt;br /&gt;
        fi&lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
        [ -z &amp;quot;$makef&amp;quot; ] &amp;amp;&amp;amp; makef=$mdef&lt;br /&gt;
&lt;br /&gt;
    # Если задан шаблон поиска, то ограничиться&lt;br /&gt;
    # этим шаблоном&lt;br /&gt;
    if [ -n &amp;quot;$2&amp;quot; ]; then gcmd='grep &amp;quot;^$2&amp;quot;' ; else gcmd=cat ; fi&lt;br /&gt;
&lt;br /&gt;
    # если мы не желаем использовать *.mk, то необходимо убрать cat и использовать&lt;br /&gt;
    # test -f $makef с перенаправлением ввода&lt;br /&gt;
    COMPREPLY=( $(cat $makef 2&amp;gt;/dev/null | awk 'BEGIN {FS=&amp;quot;:&amp;quot;} /^[^.#   ][^=]*:/ {print $1}' | tr -s ' ' '\012' | sort -u | eval $gcmd ) )&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
complete -F _make_targets -X '+($*|*.[cho])' make gmake pmake&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# cvs(1) completion&lt;br /&gt;
_cvs ()&lt;br /&gt;
{&lt;br /&gt;
    local cur prev&lt;br /&gt;
    COMPREPLY=()&lt;br /&gt;
    cur=${COMP_WORDS[COMP_CWORD]}&lt;br /&gt;
    prev=${COMP_WORDS[COMP_CWORD-1]}&lt;br /&gt;
&lt;br /&gt;
    if [ $COMP_CWORD -eq 1 ] || [ &amp;quot;${prev:0:1}&amp;quot; = &amp;quot;-&amp;quot; ]; then&lt;br /&gt;
        COMPREPLY=( $( compgen -W 'add admin checkout commit diff \&lt;br /&gt;
        export history import log rdiff release remove rtag status \&lt;br /&gt;
        tag update' $cur ))&lt;br /&gt;
    else&lt;br /&gt;
        COMPREPLY=( $( compgen -f $cur ))&lt;br /&gt;
    fi&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
complete -F _cvs cvs&lt;br /&gt;
&lt;br /&gt;
_killall ()&lt;br /&gt;
{&lt;br /&gt;
    local cur prev&lt;br /&gt;
    COMPREPLY=()&lt;br /&gt;
    cur=${COMP_WORDS[COMP_CWORD]}&lt;br /&gt;
&lt;br /&gt;
    # получить список процессов&lt;br /&gt;
    COMPREPLY=( $( /usr/bin/ps -u $USER -o comm  | \&lt;br /&gt;
        sed -e '1,1d' -e 's#[]\[]##g' -e 's#^.*/##'| \&lt;br /&gt;
        awk '{if ($0 ~ /^'$cur'/) print $0}' ))&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
complete -F _killall killall killps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Функция обработки мета-команд&lt;br /&gt;
# В настоящее время недостаточно отказоустойчива (например, mount и umount&lt;br /&gt;
# обрабатываются некорректно), но все еще актуальна. Автор Ian McDonald, изменена мной.&lt;br /&gt;
&lt;br /&gt;
_my_command()&lt;br /&gt;
{&lt;br /&gt;
    local cur func cline cspec&lt;br /&gt;
&lt;br /&gt;
    COMPREPLY=()&lt;br /&gt;
    cur=${COMP_WORDS[COMP_CWORD]}&lt;br /&gt;
&lt;br /&gt;
    if [ $COMP_CWORD = 1 ]; then&lt;br /&gt;
        COMPREPLY=( $( compgen -c $cur ) )&lt;br /&gt;
    elif complete -p ${COMP_WORDS[1]} &amp;amp;&amp;gt;/dev/null; then&lt;br /&gt;
        cspec=$( complete -p ${COMP_WORDS[1]} )&lt;br /&gt;
        if [ &amp;quot;${cspec%%-F *}&amp;quot; != &amp;quot;${cspec}&amp;quot; ]; then&lt;br /&gt;
            # complete -F &amp;lt;function&amp;gt;&lt;br /&gt;
            #&lt;br /&gt;
            # COMP_CWORD and COMP_WORDS() доступны на запись,&lt;br /&gt;
            # так что мы можем установить их перед тем,&lt;br /&gt;
            # как передать их дальше&lt;br /&gt;
&lt;br /&gt;
            # уменьшить на 1 текущий номер лексемы&lt;br /&gt;
            COMP_CWORD=$(( $COMP_CWORD - 1 ))&lt;br /&gt;
            # получить имя функции&lt;br /&gt;
            func=${cspec#*-F }&lt;br /&gt;
            func=${func%% *}&lt;br /&gt;
            # получить командную строку, исключив первую команду&lt;br /&gt;
            cline=&amp;quot;${COMP_LINE#$1 }&amp;quot;&lt;br /&gt;
            # разбить на лексемы и поместить в массив&lt;br /&gt;
                COMP_WORDS=( $cline )&lt;br /&gt;
            $func $cline&lt;br /&gt;
        elif [ &amp;quot;${cspec#*-[abcdefgjkvu]}&amp;quot; != &amp;quot;&amp;quot; ]; then&lt;br /&gt;
            # complete -[abcdefgjkvu]&lt;br /&gt;
            #func=$( echo $cspec | sed -e 's/^.*\(-[abcdefgjkvu]\).*$/\1/' )&lt;br /&gt;
            func=$( echo $cspec | sed -e 's/^complete//' -e 's/[^ ]*$//' )&lt;br /&gt;
            COMPREPLY=( $( eval compgen $func $cur ) )&lt;br /&gt;
        elif [ &amp;quot;${cspec#*-A}&amp;quot; != &amp;quot;$cspec&amp;quot; ]; then&lt;br /&gt;
            # complete -A &amp;lt;type&amp;gt;&lt;br /&gt;
            func=${cspec#*-A }&lt;br /&gt;
        func=${func%% *}&lt;br /&gt;
        COMPREPLY=( $( compgen -A $func $cur ) )&lt;br /&gt;
        fi&lt;br /&gt;
    else&lt;br /&gt;
        COMPREPLY=( $( compgen -f $cur ) )&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
complete -o default -F _my_command nohup exec eval trace truss strace sotruss gdb&lt;br /&gt;
complete -o default -F _my_command command type which man nice&lt;br /&gt;
&lt;br /&gt;
# Локальные переменные:&lt;br /&gt;
# mode:shell-script&lt;br /&gt;
# sh-shell:bash&lt;br /&gt;
# Конец:&lt;br /&gt;
&lt;br /&gt;
[[Категория:Общее *nix]]&lt;/div&gt;</summary>
		<author><name>Sol</name></author>
	</entry>
</feed>