PKUWWT

消遣时光

GNU screen 保存会话

GNU Screen支持在一个终端内(但超越了终端)保存了多个shell状态,非常实用,用户可以像对待多个桌面那样将工作分类,一个shell对应一个工作目录,拥有唯一的名称,只干一件事情。但是,电脑重启了怎么办,之前的工作环境就丢失了。怎样将当前的screen运行实例作为一个会话保存起来供下次使用呢?

办法是有的,那就是用配置文件~/.screenrc

下面是一个配置文件的例子

 1 screen -t "bzr"
 2 stuff "bzr diff | colordiff"
 3 screen -t "misc"
 4 screen -t "devsvr"
 5 stuff "cd ~/google_appengine^M"
 6 stuff "./dev_appserver.py -p 8084 ~/shared/appengine/conquer-on-contact/root/"
 7 screen -t "update"
 8 stuff "cd ~/google_appengine^M"
 9 stuff "./appcfg.py update ~/shared/appengine/conquer-on-contact/root/"
10  
11 #change the hardstatus settings to give an window list at the bottom of the
12 #screen, with the time and date and with the current window highlighted
13 hardstatus alwayslastline 
14 hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %d/%m %{W}%c %{g}]'
15 vbell on
16 defscrollback 1024
17 startup_message off
18 autodetach on
19 defutf8 on

screen-t选项显然就是指定标题或名称,stuff的作用是为当前的shell指定任务,实际上相当于粘贴文本。注意,如果想执行命令,需要在文本末尾加上^M字符,注意,这是一个字符,也就是CR字符,即\r。它在vim如果显示出来看起来就是^M

给出在vim中输入CR字符的几种方法:

  • 插入模式下,C-V Enter
  • 插入模式下,C-V C-M。命令行模式中也可以。
  • 插入模式下使用digraph,C-K C R

如果C-V已经有其它用途了,那就只好使用C-K C R了。另外,也可以用其它命令生成这个字符

echo -e "\r" >file

你也可以将配置文件存储到任意文件screensc中,然后,用下面命令加载

screen -S "SESSION_NAME" -c screensc

参考文献