Назад | Перейти на главную страницу

Экран GNU, как получить текущее имя сеанса программно

[Это можно считать шагом 2 моего предыдущего вопроса Можно ли изменить имя сеанса экрана GNU после создания? ]

Фактически, я хотел бы написать сценарий, который может отображать имя текущего сеанса экрана и изменять имя текущего сеанса.

Например:

sren armcross

Это изменит имя сеанса на armcross (Кросс-компилятор ARM gcc) и выведите что-то вроде:

screen session name changed from '25278.pts-15.linux-ic37' to 'armcross'

Итак, ключевой вопрос теперь - как получить имя текущего сеанса. Не только для отображения старого имени сеанса, но и в соответствии с Можно ли изменить имя сеанса экрана GNU после создания? , Я должен это знать (перейти к -d -r), прежде чем я смогу изменить его на что-то другое.

Можем ли мы использовать $STY для текущего имени сеанса? Нет. $STY не изменится после того, как вы изменили имя сеанса на определенное пользователем. Однако для командования

screen -d -r <oldsessname> -X sessionname armcross

<oldsessname> должно быть пользовательским именем (если оно когда-либо определено) вместо $STYв противном случае выводится сообщение об ошибке «Сеанс экрана не найден».

Может быть, есть подробный способ, используйте screen -list чтобы перечислить все сеансы (указанное пользователем имя), затем сопоставьте часть pid из $ STY с этими перечисленными сеансами, и мы найдем определенное пользователем имя текущего сеанса. Это не должно быть таким многословным для такого простого вопроса. Вы так не думаете?

Параметры -d -D и -r -R, кажется, предоставляют пользователю экрана слишком много деталей реализации. Похоже, чтобы переименовать сеанс, вам нужно отсоединить его, затем переименовать, а затем снова подключить. Правильно?

Мой env: opensuse 11.3, экран GNU 4.00.03 (FAU) 23 октября 2006 г.

Спасибо.

не могли бы вы попробовать это;

screen -d -r $(ps -o ppid -p $$ --no-headers) -X sessionname newsessionname

Похоже, что когда вы устанавливаете sessionname экран вручную изменяет имя соответствующего файла в /var/run/screen/S-$USER/ но не обновляет значение $STY что было бы идеально.

Мы все еще можем использовать исходное значение $STY чтобы получить имя текущего сеанса, хотя как $STY содержит PID что относится к этому имени сеанса.

PID=$(echo $STY | awk -F"." '{ print $1}')

Затем вы можете использовать PID чтобы получить имя сеанса из / var / run / screen / S- $ USER

SESSIONNAME=$( ls /var/run/screen/S-$USER/$PID* | awk -F"." '{print $2}' )

Теперь у вас есть имя сеанса в SESSIONNAME вы можете делать с ним все, что хотите.