在 gnu 屏幕之间快速切换

quickly switch between gnu screens

我想在不同的 gnu 屏幕会话之间快速切换(不是 windows)。现在我可以使用 screen -d 从一个会话中分离出来并使用 screen -r <sessionname> 重新连接到下一个会话,但是有没有办法在一个命令中执行此操作?类似于 screen -d && screen -r <sessionname>?

不,不幸的是 GNU 屏幕上没有这样的东西。

这很容易通过实用程序脚本完成:

#!/usr/bin/env bash

set -eu
set -o pipefail
unset CDPATH
: "${BASH:?bash shell is required}"


screen -ls || true

for s in $(screen -ls | tail -n +2 | head -n -2 | sort -R | cut -f2)
do
    read -n 1 -s -r -p '[y/n] switch to '"$s"'?' REPLY
    if [[ "$REPLY" == "y" ]]
        then
            screen -DR "$s"
        else echo
    fi
done

在您的路径中将其保存为 cycle-screen 并使其可执行。使用示例:

There are screens on:
    43094.27    (Detached)
    47415.12    (Attached)
    54922.31    (Detached)
3 Sockets in /var/folders/r5/7_prvssx301dyz4jz2pbky5w0000gn/T/.screen.

[y/n] switch to 54922.31?

键入 y 以进入提示中指定的屏幕,或输入任何其他内容以跳过它。当您离开屏幕时(通过 ^a^d^dexit 或其他),您会收到后续屏幕的提示。