на экране GNU я хочу, чтобы заголовок сеанса отображался в строке состояния. Это работает, но не совсем так, как я хотел.

У меня есть следующий backtick, определенный в моем .screenrc:

backtick 100 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'

Как я уже сказал, он отображает заголовок сеанса экрана, а также PID этого сеанса; это показывает, например, что-то вроде

1234.foo

где foo - название этой сессии.

Мой вопрос: как я могу удалить цифры, включая точку, чтобы показать только название сеанса? (Я, очевидно, не слишком знаком с grep ...)

2 ответа2

1

В вашем случае используйте awk, чтобы легко получить имя сеанса из вывода screen -ls .

screen -ls | grep --color=no -o "$PPID[^[:space:]]*" | awk 'BEGIN { FS="."} { print $NF }'

в моей тестовой среде:

(default sessionname)
$ screen -ls | grep --color=no -o "$PPID[^[:space:]]*"
12817.pts-5.hostname
$ screen -ls | grep --color=no -o "$PPID[^[:space:]]*" | awk 'BEGIN { FS="."} { print $NF }'
hostname

(sessionname is 'foo')
$ screen -ls | grep --color=no -o "$PPID[^[:space:]]*"
12817.foo
$ screen -ls | grep --color=no -o "$PPID[^[:space:]]*" | awk 'BEGIN { FS="."} { print $NF }'
foo

Если вы используете самую последнюю версию экрана GNU (> = 4.1.0), вы можете использовать escape-строку %S в заголовке или символе hardstatus для отображения имени сеанса.

hardstatus alwayslastline "[%S] some strings you like..."
0

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

Однако я нашел другой способ сделать то, что я хочу, используя команду tr :

backtick 100 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*" | tr -d [:digit:]' | tr -d .

Первая команда tr удаляет PID (числа), а вторая команда tr удаляет точку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .