我已经尝试了一堆命令,但它们都将会话附加到当前会话中,正如您可以想象的那样,当我稍后尝试重新附加它时它会保释,因为它已经附加在会话嵌套中。
我为我使用 Windows 处理的每个项目创建会话到远程服务器、日志和 vim。但是每次我想切换时,我都必须先 Ca d 然后 screen -DR
我宁愿只输入一个命令。
谢谢
我已经尝试了一堆命令,但它们都将会话附加到当前会话中,正如您可以想象的那样,当我稍后尝试重新附加它时它会保释,因为它已经附加在会话嵌套中。
我为我使用 Windows 处理的每个项目创建会话到远程服务器、日志和 vim。但是每次我想切换时,我都必须先 Ca d 然后 screen -DR
我宁愿只输入一个命令。
谢谢
AFAIK 这是不可能的screen
,我知道没有办法轻松解决这个限制。这里的问题是每个screen
会话都是独立的,并且不知道其他会话。
如果这是您经常使用的功能,我建议您切换到tmux
使用<C-b>s
. 在过去的一年中,每当需要终端多路复用器时,我都广泛使用了这两种方法screen
,tmux
并且不后悔偏爱。tmux
附带说明一下,运行嵌套屏幕会话并不太难,只需发送两个转义符和命令进入内部屏幕会话,如果转义符是单个字符,它会有所帮助,我喜欢:
escape ``
为此有一个 bash 脚本,https://github.com/scottxhe/switch-screen-session使用循环和命名管道,它干净且易于设置和使用。我是作者。这是主要的 bash 功能。把它放在一个脚本中并获取它。ss
应该是可调用的。
ss my-session-name
从屏幕内部或外部。my-session-name
可以是新的或现有的会话。如果您对其他细节感兴趣,请查看 github。
ss() {
if [ -z $1 ]; then
screen -ls
return 0
fi
next_session=$1
prev_session=$1
if [ -z "$STY" ]; then
if [ ! -e ~/.next_s ]; then
mkfifo ~/.next_s
fi
if [ ! -e ~/.prev_s ]; then
mkfifo ~/.prev_s
fi
(
echo $next_session > ~/.next_s &
echo $prev_session > ~/.prev_s &
)
while true; do
next="$(cat ~/.next_s)"
prev="$(cat ~/.prev_s)"
if [ -z "$next" ] && [ -z "$prev" ]; then
return 0
elif grep -q "^~" <<< "$prev"; then
next_session=$prev_session
prev_session="$(sed s/~// <<<"$prev" | grep -v "^$")"
else
prev_session=$prev
next_session=$(grep -v "^$" <<< "$next")
fi
screen -dR $next_session
(
echo '' > ~/.next_s &
echo '' > ~/.prev_s &
)
done
else
(
echo $next_session > ~/.next_s &
echo $STY > ~/.prev_s &
)
screen -d $STY
fi
}