[Это можно считать шагом 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
вы можете делать с ним все, что хотите.