GNU屏幕,如何以编程方式获取当前会话名称

[这可以考虑我以前的问题的第2步是否有可能改变GNU屏幕会话名称后创build? ]

其实,我想写一个脚本,可以显示当前的屏幕会话名称和更改当前会话名称。

例如:

sren armcross 

它会将会话名称更改为armcross (ARM gcc交叉编译器)并输出如下所示的内容:

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

所以,现在关键的问题是如何获取当前的会话名称。 不仅用于显示旧的会话名称,而且根据是否可以在创build后更改GNU屏幕会话名称? ,我必须知道它(传递给-d -r),然后才能将其更改为其他内容。

我们可以使用$STY作为当前会话名称吗? 在将会话名称更改为用户定义的名称后, $STY不会更改。 但是,为了命令

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

<oldsessname>应该是用户定义的名称(如果定义的话),而不是$STY ,否则屏幕出现错误“找不到屏幕会话”。

也许,有一个详细的方法,使用screen -list列出所有会话(列出用户定义的名称),然后将$ STY的pid部分与列出的会话进行匹配,我们将find当前会话的用户定义的名称。 对于这样一个直截了当的问题,不应该这么冗长。 你不这么认为吗?

-d -D和-r -R选项似乎向屏幕的用户公开了太多的实现细节。 看来,重新命名一个会话,你必须分离它,然后重命名,然后重新附加它。 对?

我的环境:opensuse 11.3,GNU屏幕4.00.03(FAU)06年10月23日

谢谢。

你能试试这个吗?

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中拥有会话SESSIONNAME您可以按照自己的意愿进行操作。