[这可以考虑我以前的问题的第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您可以按照自己的意愿进行操作。