April 2032
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
|
1/8/09 03:46 pm
Set X terminal title
А вот ещё микрохаутушечка для линуксоида-любителя.
Есть у меня скрипт, который делает некую полезную работу, поделённую на пару десятков этапов. Каждый этап может длиться несколько минут или часов. Я запускаю скрипт в терминале, он цветной строчкой с таймстемпом оповещает о начале каждого этапа, типа:
[12:23:22] [4/21] Updating bla bla ....
Но потом эта строчка уползает вверх, и, посмотрев на терминал в произвольный момент времени, непонятно, что там происходит.
Меж тем у терминала (иксового) есть некий текст, написанный в рамке X окна. Почему бы туда не написать нам ту же строчку, что мы выводим на экран. Аналогично поступает, например, emerge из Gentoo.
Читаем мой любимый console_codes(4) и выясняем, что для этого нужно. Пишем простой код на шелле (он же показывает разноцветности в терминале):
#!/bin/bash
# Example of setting title and using colors in terminal.
# By Kir Kolyshkin <kir AT sacred DOT ru>
BF='\033[1m' # Bold
NF='\033[0m' # Normal
GF='\033[32m' # Green
SET_TITLE='\033]0;' # Set title
ST='\033\\' # ECMA-48 string terminator
# Log to console and set terminal title as well
log() {
local d=$(date +%H:%M:%S)
echo -e [${GF}${d}${NF}] ${BF}$*${NF}
echo -ne ${SET_TITLE}[$d] $*${ST}
}
# Usage example
MAX=10
for N in $(seq 1 $MAX); do
log "Counting $N/$MAX..."
sleep 0.7
done
1/8/09, 04:53 pm
офф, но про цветную консоль. Помнится был тут пост про xterm-256color. Наткнулся как-то на грабли, что убунты (и кажется иногда дебиан) не знают про такой терминал. С редхатами ни разу такого не видел.
1/8/09, 05:09 pm
Да я знаю, что не во всех дистрибутивах описание этого терминала есть, к сожалению.
1/8/09, 08:48 pm
угу, у меня через это выводится текущий каталог или исполняемая программа....
а вот в слежении за процессами как-то не было нужды. Гораздо интересней делать извещение о закончившемся процессе...
1/9/09, 05:48 pm
Он у меня работает несколько часов, и мне хочется знать, в каком месте он находится сейчас.
1/9/09, 05:18 pm
Черти из Эпл недоложили seq в Mac OS X
1/9/09, 05:46 pm
> Черти из Эпл недоложили seq в Mac OS X
seq идёт из GNU coreutils и это, скорее всего, GNU extension.
Если баш, то можно заменить на for ((N=1; N<=MAX; N++)); do
1/9/09, 05:48 pm
А если не баш, то for N in 1 2 3 4 5 6 7 8 9 10; do
1/9/09, 05:50 pm
или там, я не знаю,
N=1
while test $N -le $MAX; do
....
let N=N+1
done
1/9/09, 05:32 pm
и ST='\033\\' у меня лишние \ добавляет в конце строки - мой вариант ST='\033'
1/9/09, 05:47 pm
ST — это String Terminator, состоит из ESC и \
1/9/09, 05:59 pm
Я это понял, но в моем случае \ оказался лишним.
1/9/09, 06:00 pm
Какой-то у тебя больной терминал тогда, кмк
1/9/09, 06:14 pm
Пишет что эмулирует xterm-color $ env | grep TERM TERM_PROGRAM=Apple_Terminal TERM=xterm-color TERM_PROGRAM_VERSION=240
$ stty speed 9600 baud; lflags: echoe echoke echoctl pendin iflags: iutf8 oflags: -oxtabs cflags: cs8 -parenb
1/9/09, 06:37 pm
но, видимо, ST неправильно понимает.
в console_codes(4) написано ещё, что в качестве ST можно использовать BEL (то есть \007). попробуй его
1/9/09, 06:49 pm
Я попробовал Terminal, xterm, rxvt, konsole и gnome-terminal — везде (кроме konsole) работает правильно, слеш в конце не пишет.
В konsole всё хитро — во-первых, в дефолтных настройках заголовок окна, выставляемый «изнутри», вообще никак не используется, а если настроить, чтобы он показывался (%w в Settings -> Tabs -> [Remote] tab title format), то всё равно не работает. Если же сменить ST на \007, то работает. То есть тоже ECMA ST не понимает
1/10/09, 07:52 pm
А вот как бы из шелл-скрипта текущее окно максимизировать... Ну или аналог виндового `start /max` получить.
1/10/09, 08:27 pm
В принципе можно воспользоваться devilspie, хотя он не совсем для этого.
1/10/09, 09:21 pm
Вроде бы, через D-Bus или DCOP можно. Но пока не нашел как.
1/10/09, 09:42 pm
> Вроде бы, через D-Bus или DCOP можно.
это не очень переносимо, а devilspie везде работать будет
|