суббота, 15 марта 2008 г.

Украшаем командную строку в csh/tcsh

Вид командной строки в csh/tcsh задается несколькими переменными окружения. Главная из них - prompt. По умолчанию приглашение командной строки имеет вид

%
что нас совершенно не устраивает. Введем команду
set prompt="%m%# "
где %m - имя компьютера, %# - символ > (или первый символ переменной promptchars) для обычных пользователей или символ # (или второй символ переменной promptchars) для суперпользователя.
Увидим, что приглашение изменилось
machine> 
Мы перестаем путаться в в удаленных сессиях. Далее добавим имя текущего пользователя (%n) и полное имя директории, где мы сидим в данный момент (%/)
set prompt="%n@%m [%/]%# "
Вид меняется на
user@machine [/usr/local/etc]> 
Наше приглашение стало более информативной. Но полный путь занимает слишком много места. Меняем %/ на %c, урезающий отображаемый путь до имени текущей директории
set prompt="%n@%m [%c]%# "
и у нас получилось
user@machine [etc]> 
что уже выглядит лаконичнее. Добавим текущее время (счастливые могут пропустить :)
set prompt="%T %n@%m [%c]%# "
и вуаля
23:01 user@machine [etc]> 
По правде говоря, лично меня символ > в конце приглашения раздражает. Для смены символа используем переменную promptchars
set promptchars="$#"
Первый символ подставляется вместо %# если вы обычный пользователь, а второй - если вы суперпользователь.
Теперь записываем полученный результат в ~/.tcshrc или в /etc/csh.cshrc.

Ниже приведен список допустимых подстановок (подробности в man csh):
%/
Текущая рабочая директория.
%~
Текущая рабочая директория, но домашная директория текущего пользователя представлено тильдой ~ и домашние директории остальных пользователей представлены как ~user. Подстановка ~user действует только в случае если оболочка (shell) уже использует ~user в имени пути в текущей сессии.
%c[[0]n], %.[[0]n]
Отслеживает конечный компонент пути к текущей рабочей директории или n конечных компонентов, при заданном n. Если n начинается с 0 количество пропущенных компонентов предваряет конечные в формате /<skipped>trailing. Если установлена переменная оболочки ellipsis, пропущенные компоненты будут представлены как ...trailing. Подстановка ~ действует аналогично %~, но будет игнорироваться при количестве конечных компонентов больше одного.
%C
Аналогично %c, но без подстановок ~.
%h, %!, !
Номер события в текущей истории.
%M
Полное имя машины.
%m
Сокращенное имя машины. Отображается часть до первой точки.
%S (%s)
Включить (отключить) стандартный режим.
%B (%b)
Включить (отключить) режим жирного шрифта.
%U (%u)
Включить (отключить) режим подчеркивания.
%t, %@
Время в 12-часовом (AM/PM) формате.
%T
Аналогично %t, но в 24-часовом формате (зависит от переменной ampm оболочки).
%p
Точное время суток в 12-часовом (AM/PM) формате, с секундами.
%P
Аналогично %p, но в 24-часовом формате (зависит от переменной ampm оболочки).
\c
c будет распознан как код символа.
%%
Символ %.
%n
Имя пользователя.
%j
Количество запущенных в оболочке работ (jobs).
%d
День недели в текстовом формате.
%D
День недели в числовом формате.
%w
Месяц в текстовом формате.
%W
Месяц в числовом формате.
%y
Год в двухзначном формате.
%Y
Год в четырехзначном формате.
%l
tty оболочки.
%L
Очищает от конца приглашения до конца экрана или строки.
%$
Подставляет значение переменной оболочки или окружения с именем, заданным сразу после $ (например %$PATH).
%#
> (или первый символ из переменной оболочки promptchars) для обычных пользователей и # (или второй символ из promptchars).
%{string%}
Включает строку как управляющая escape последовательность. Может использоваться для изменения атрибутов терминала (например для раскраски приглашения) и может не воздействовать на положение курсора. Не может быть последней последовательностью в приглашении.
%?
Возвращает код ошибки команды, запущенной непосредственно перед приглашением.

9 комментариев:

f-andrey комментирует...

:) как в тему то мне тут что то тоже наскучал стандартный вид, но я пока решил раскрасить консоль в старорежимную черно зеленую гамму, если кому пригодится делается например вот так
setenv TERM xterm-color
setenv CLICOLOR
vidcontrol green black
пока искал попалось так же как можно оживить алиасы ls
alias ll ls -lA --color=auto

polkan комментирует...

попробуй мою... :) имхо красяво и информативно
set prompt = "\\
%{^[[3;20;3m%}$USER@$HOST%{^[[m%} %{^[[3;36;3m%}%T%{^[[m%} %{ESC[3;33;3m%}%//%{ESC[m%} \\
%{^[[3;33;3m%}:>%{^[[m%} "

не забудь что ^[[ это не набор символов, а esc-последовательность ;)

Князь комментирует...

set prompt = "\\
%{^[[3;20;3m%}%n@%m%{^[[m%} %{^[[3;36;3m%}%T%{^[[m%} %{^[[3;33;3m%}%//%{^[[m%} \\
%{^[[3;33;3m%}:>%{^[[m%} "

Чуть подправил твой вариант :)

Сашок комментирует...

Mogno ewe tak:
set prompt="\n%B%{\033[34m%}[%h] %d %D.%w.%Y %P\n%{\033[31m%}[%n][%m][%~]\n%{\033[30m%}%b"

i tak
my
set prompt = "%{\033[1;34m%} [%d %T %{\033[0;32m%}%n%{\033[1;34m%}@%{\033[1;31m%}%m%{\033[1;34m%}] %{\033[0;32m%}%/%{\033[0;32m%}%#"

Unknown комментирует...

set prompt = "%{\033[1;34m%} [%d %T %{\033[0;32m%}`/rescue/whoami`%{\033[1;34m%}@%{\033[1;31m%}%m%{\033[1;34m%}] %{\033[0;32m%}%/%{\033[0;32m%}%#"
Вот... так правильнее.. после su верно пользователя выдаёт..

Анонимный комментирует...

Спасибо. Весьма полезно

The NT Visigoth комментирует...

Статья полезная, но до сих пор не понятно как задавать цвет? Вернее место где это писать показано, а вот что означает та или иная цифра, толи зеленный толи красный?

Z1 комментирует...

http://www.funtoo.org/images/1/1c/Colortable.gif

Z1 комментирует...
Этот комментарий был удален автором.