Tcsh.

Перед прочтением статьи подумайте нужен ли вам tcsh? Более того, здесь вы можете увидеть 10 причин, почему не стоит использовать его. Он не POSIX- совместимый. Но я всё же на этом шелле... Почему же..? Конфигурабельность и скорость, плюс некоторые фичи, к примеру, коррекция ввода. Да, иногда не- POSIX'нутость бесит, но всё же этот шелл наиболее удобен для повседневного использования (но не для написания скриптов!). Задача статьи не перевести man tcsh, а настроить удобную работу в терминале.

$ sudo pacman -Sy tcsh
$ tcsh
>

Запустив, вы увидите, что шелл почти ничего не умеет кроме пускания исполняемых файлов, в отличии от баша, который удобен "из коробки". На самом деле слово "удобен" тоже стоит взять в кавычки, ведь за вас решили, что вам нужно! По-моему, хотя бы для осознания ваших потребностей стоит взглянуть на данный шелл. Начнем с создания конфига.

$ touch ~/.tcshrc
$ vi ~/.tcshrc

Пишем в файл следущее:

set prompt    = "%{33[32m%}%B%# "
set path      = (/sbin /bin /usr/sbin /usr/bin $HOME/bin)
set correct   = cmd
set autolist  = ambiguous
set complete  = enhance
set rmstar
set history   = 100
set savehist  = 100
set listjobs  = long
set inputmode = insert
set noclobber
set histdup   = prev
set listmax   = 100
set implicitcd
set pushdsilent
set dunique
set dextract
set dirstack
set nobeep
set color
set printexitvalue
set autoexpand

complete which    'p/1/c/'
complete where    'p/1/c/'
complete man      'p/1/c/'
complete sudo     'p/1/c/'
complete kill     'c/-/S/' 'p/*/`ps -A | awk \{print\ \$1\} | tail -n +2`/'
complete killall  'c/-/S/' 'p/*/`ps -A | awk \{print\ \$4\} | tail -n +2 | sort | uniq`/'
complete m        'p/1/c/'
complete s        'p/1/c/'

complete chgrp    'p/1/g/'
complete chown    'p/1/u/'

complete alias    'p/1/a/'
complete unalias  'p/1/a/'

complete set      'p/1/s/'
complete unset    'p/1/s/'

complete limit    'p/1/l/'
complete bindkey  'C/*/b/'

setenv LS_COLORS    'no=01;37:fi=01;37:di=01;35:ln=01;36:pi=01;32:so=01;35:do=01;35:bd=01;33:cd=01;33:ex=01;32:mi=00;05;37:or=00;05;37:'
setenv PAGER        'less'
setenv EDITOR       'vi'

alias s     'sudo'
alias e     '$EDITOR'
alias p     '$PAGER'
alias c     'cat'
alias g     'grep'
alias j     'jobs -l'
alias m     'man'
alias h     'history'

alias se    'sudo $EDITOR'
alias sc    'sudo cat'
alias gi    'grep -i'
alias cl    'clear'

alias pu    'pushd'
alias po    'popd'

alias ds    'dirs -v'
alias dss   'dirs -S'
alias dsl   'dirs -L'
alias dsc   'dirs -c'

alias mak   'make'
alias m2    'man 2'
alias m3    'man 3'
alias pac   'pacman'
alias spac  'sudo pacman'
alias ls    'ls --color=auto -F'
alias grep  'grep --color=always'
alias pingt 'ping -i 0.2 -c 100'
alias octave 'octave -q'

bindkey "^[[3~" delete-char
bindkey "^W"    backward-delete-word

Теперь углубимся в матчасть. Опции: prompt — ставит строку "приветствия", мне достаточно ">", но вы можете поставить, к примеру, "%{33[30m%}%m:%{33[37m%} %B%~ %{33[32m%}%B%# " и получите "myhost: ~/path > " в разных цветах. path — очевидно, пути поиска исполняемых файлов correct — коррекция ввода: cmd правит только команду, all правит команды по всей строке, complete автоматически дополняет команды. > pacmn -Syu CORRECT>pacman -Syu (y|n|e|a) autolist — показывает возможные значения при неоднозначном дополнении, ambiguous показывает значения если были введены новые символы. complete — если поставлен enhance, игнорирует регистр при дополнении и считает '-', '.' и '_' одинаковыми. rmstar — спрашивает пользователя, если rm * введено.

> rm *
Do you really want to delete all files? [n/y]

history — сохраняемое количество команд в истории, так же можно изменить формат истории savehist — сохраняемое количество команд в файл истории (стандартно ~/.history). listjobs — показывает все задачи, если одна из них завершилась, long — показывает информацию о задачах более подробно inputmode — способ ввода: insert или overwrite — вроде все понятно. noclobber — запрещает перезапись существующих файлов

> touch 1
> echo "hello!" > 1
1: File exists.
> echo "hello!" >! 1
> cat 1
hello!

histdup — управляет повторяющимися значениями в истории, prev не вносит в историю одинаковые записи, если они созданы подряд, all не вносит запись, если она уже существует, erase вносит запись в историю, удалив старую. listmax — максимальное количество элементов, показываемое без вопроса при дополнении.

> ls /dev/[^I]
There are 188 items, list them anyway? [n/y]

implicitcd — переход к директории без набора cd, если присвоено verbose, то будет каждый раз выводить смену пути в stdout.

> pwd
/home/ferhiord
> ~/programming/
> pwd
/home/ferhiord/programming

pushdsilent — отключает вывод pushd и popd. dunique — перед занесением нового значения в стек директорий pushd удаляет предыдущее повторение. dextract — позволяет извлекать n-ую директорию из стека, посредством pushd +n. dirstack — позволяет получать доступ к элементам стека директорий, посредством $dirstack[номер]. nobeep — отключение "пищалки" color — включает цвет для ls-F и добавляет --color=auto для ls, может ставится отдельно для обеих команд. printexitvalue — выводит возвращаемое значение приложения, если оно не равно 0.

> ls /qwe
ls: cannot access /qwe: No such file or directory
Exit 2

autoexpand — включает дополнение из истории

> cd /bin
> history
1  23:21    cd /bin
2  23:21    history
> !c[^I]

Хотите большего? Вам сюда ну или в man tcsh. Об алиасах говорить нечего, в принципе, и так понятно: всё сделано для того, чтобы было быстро и удобно обращаться с шеллом; сравните:

> sudo cat /root/.tcshrc | grep -i bind

и

> sc /root/.tcshrc | gi bind

Описания bindkey позволяют "навешивать" действия на сочетания клавиш. Важная часть — это дополнения. Их можно настраивать как душе угодно: для sudo дополнение команд, для chown дополнение пользователей, для kill дополнение сигналов и номеров процессов... всё зависит от вашей фантазии и потребностей. Быть может, когда-нибудь у меня дойдут руки до написания дополнения пакетов для pacman'а. Конечно, до совершенства далеко. Я понимаю, что могу улучшить работу с шеллом посредством дополнительных опций и других подходов (до tcsh я не знал, что такое стек директорий и, конечно, его не использовал). Но tcsh реально охватить мозгом, осмыслить и познать, в отличии от монстра zsh, который умеет гораздо больше (но, надо сказать, является жутким тормозом). И пока я не планирую расширять конфиг. Взято из заметок арчера.

Размещено: 21.03.2009 00:50 Всего комментариев: 0
Автор: ferhiord Блог: ferhiord's blog
Тэги: shell , tcsh , конфиг , настройка

Комментарии:

Нет комментариев.

Пожалуйста войдите или зарегистрируйтесь чтобы оставлять комментарии.