k001
k001
:...

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

k001 [userpic]
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

Tags: ,
Comments

офф, но про цветную консоль.
Помнится был тут пост про xterm-256color. Наткнулся как-то на грабли, что убунты (и кажется иногда дебиан) не знают про такой терминал. С редхатами ни разу такого не видел.

Да я знаю, что не во всех дистрибутивах описание этого терминала есть, к сожалению.

угу, у меня через это выводится текущий каталог или исполняемая программа....

а вот в слежении за процессами как-то не было нужды. Гораздо интересней делать извещение о закончившемся процессе...

Он у меня работает несколько часов, и мне хочется знать, в каком месте он находится сейчас.

Черти из Эпл недоложили seq в Mac OS X

> Черти из Эпл недоложили seq в Mac OS X

seq идёт из GNU coreutils и это, скорее всего, GNU extension.

Если баш, то можно заменить на for ((N=1; N<=MAX; N++)); do

А если не баш, то
for N in 1 2 3 4 5 6 7 8 9 10; do

или там, я не знаю,

N=1
while test $N -le $MAX; do
      ....
      let N=N+1
done

Спасибо за совет.

и ST='\033\\' у меня лишние \ добавляет в конце строки - мой вариант ST='\033'

ST — это String Terminator, состоит из ESC и \

Я это понял, но в моем случае \ оказался лишним.

Какой-то у тебя больной терминал тогда, кмк

Пишет что эмулирует 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

но, видимо, ST неправильно понимает.

в console_codes(4) написано ещё, что в качестве ST можно использовать BEL (то есть \007). попробуй его

c \007 тоже работает

Я попробовал Terminal, xterm, rxvt, konsole и gnome-terminal — везде (кроме konsole) работает правильно, слеш в конце не пишет.

В konsole всё хитро — во-первых, в дефолтных настройках заголовок окна, выставляемый «изнутри», вообще никак не используется, а если настроить, чтобы он показывался (%w в Settings -> Tabs -> [Remote] tab title format), то всё равно не работает. Если же сменить ST на \007, то работает. То есть тоже ECMA ST не понимает

А вот как бы из шелл-скрипта текущее окно максимизировать...
Ну или аналог виндового `start /max` получить.

В принципе можно воспользоваться devilspie, хотя он не совсем для этого.

Вроде бы, через D-Bus или DCOP можно. Но пока не нашел как.

> Вроде бы, через D-Bus или DCOP можно.

это не очень переносимо, а devilspie везде работать будет