如题,一分钟Mark文。
byobu 是很方便的 Unix 窗口管理器 和 Terminal Multiplexer,它是一套 profiles 或者说 wrapper ,降低使用 tmux 或 screen 的 配置 和 操作 成本。(如果不知道我说什么,看这里《小工具专题》 ,还有 byobu主页)
不过我只能算轻度用户,多数时间只使用两个功能:
- 通过 detach 让我下线之后 Session 还能继续干活,以及下次上线不用重新找目录
- 方便的多窗口管理(F2,F3,F4 完事)
从没关心过后面是 tmux 还是 screen。直到公司服务器的 byobu 由我一个人用,到大家都用。大家直接敲 byobu
完事,于是都挤在一个 Session 里,互相干扰。
用 byobu 之前我是一个 screen 用户,自然想到大家各自连自己的 Session 。试着给 byobu 加 screen 的参数,发现不行。这时才想到去确认,发现当前版本(5.74)byobu 默认 backend 是 tmux。(印象中是不是早期 byobu 试过以 screen 为默认?忘了)
$ byobu --version
byobu version 5.74
tmux 1.8
$ cat ~/.byobu/backend
BYOBU_BACKEND=tmux
我知道 tmux 也很强大,加上一些指令和参数,也可以分别创建和管理 Session。可是,我已经习惯 screen ,所以决定把后端换掉。(各位看到这里不必跟我争论哪个好用)
# 首先你要确定装了 screen,我一直有装就跳过
$ vim ~/.byobu/backend # 把里面的值改为 screen,然后保存
$ cat ~/.byobu/backend
BYOBU_BACKEND=screen
这时候开始,执行 byobu
背后已经是 screen 在干活。最初目的是为了方便分别创建 Session,对应 screen -S SessionName
,相应的 byobu 指令是否可行呢?
$ byobu -S jayce
# 执行完跳到了一个新的窗口,但是不是真的成功了呢?
~ byobu -ls
There is a screen on:
151664.jayce (Tuesday, September 19, 2017 05:30:12 CST) (Attached)
1 Socket in /var/run/screen/jayce.
注意最后的那个 Attached,表明现在就在这个 Session 里。
如果按 F6
或者 Ctrl-A,Ctrl-D
detach ,之后再看:(注意,如果第一次在 screen 按 Ctrl-A
,它会询问 Escape Sequence,建议选 1 screen mode
就好)
$ byobu -ls
There is a screen on:
151664.jayce (Tuesday, September 19, 2017 05:30:12 CST) (Detached)
1 Socket in /var/run/screen/jayce.
基本能用了,只是还有一个小问题:如果不记得/不确定之前的 Session 还在不在,那么操作流程是
$ byobu -ls # 列出当前所有 Session
$ byobu -r mysession # 如果 Session 还在就重连
$ byobu -S mysession # 如果因为重启的原因不在,新建一个
比较麻烦。screen 自带 -R SessionName
参数实现『有则重连,无则新建』 的动作。可尝试把 -R
加载 byobu 后面,不支持。byobu 是怎样接受参数并传递给 screen 的呢?试一下在没有 Session 的情况下,执行没有参数的 byobu:
$ byobu
# Ctrl-A,D detach
$ screen -ls # 跟 byobu -ls 等价
There is a screen on:
152910.byobu (Tuesday, September 19, 2017 05:48:24 CST) (Detached)
1 Socket in /var/run/screen/jayce.
byobu
背后执行的是 screen -S byobu
,也就是说,如果不指定任何参数,byobu 默认会创建一个名字叫 『byobu』 的 Session。而如果指定了(某些)参数,默认名字就不会起效。但 -R
不算在某些参数里。
$ sudo vim `which byobu`
# 省略....
148 BYOBU_SESSION_NAME="-S $PKG" # 这里的 $PKG 的值就是 byobu
149 # Zero out $BYOBU_SESSION_NAME if user has specified a session name
150 for i in "$@"; do
151 case $i in
152 -*r*|-*d*|-*D*|-*S*|-ls|-list)
153 BYOBU_SESSION_NAME=
154 ;;
155 esac
156 done
看完上面的内容,应该就知道了『某些参数』是哪些。当指定这几个参数时,默认 Session 名就会被清空。
那容易,把『某些参数』改成下面的样子:
152 -*r*|-*R*|-*d*|-*D*|-*S*|-ls|-list)
保存。好了,-R
可以用了。
就酱。