标签: gnu-screen

ssh -> screen -> ssh - 如何在不终止原始 ssh 会话的情况下终止远程筛选的 ssh

我在工作时在开发盒上运行一个屏幕会话,然后在工作时通过 ssh 进入我的开发盒并恢复我的屏幕会话。从那里,我跳到其他机器。

有时,我发现自己从已经通过 ssh 远程屏幕会话的远程主机 ssh 到远程主机,而ssh 到的远程主机不允许我完全断开连接。因此,我最终需要强制我的远程(第二个)ssh 会话终止,而不影响连接到屏幕的原始 ssh 会话。我知道杀死 ssh 是通过 a 完成的enter ~.,但就像我说的,我的本地 ssh 客户端拦截了该组合键,除了我需要将 ssh 重新连接到我的开发盒之外什么也没完成。

有人遇到过这个吗?如何在屏幕中终止远程 ssh 会话而不终止原始 ssh 会话?我在屏幕上找不到任何合适的东西来做到这一点。这也适用于额外的跃点 IE ssh -> screen -> ssh -> ssh(无法干净地注销)<-想要强制终止此 ssh 会话。

我尝试运行enter ~~.,这会终止第二个 ssh 会话,这样的方法有效。不过,对于第三次、第四次或更多次跳跃来说,这还不够好。

如果有一个解决方案能够工作,无论我通过 ssh 连接到其他机器的深度如何,那就太好了。

linux ssh gnu-screen

2
推荐指数
1
解决办法
1169
查看次数

清除到行尾在屏幕中使用错误的背景颜色

在 ZSH 提示符扩展中,命令 %E 应该是“清除到行尾”。

这有效。我们在灰色条中看到它一直延伸。

在此输入图像描述

但是,如果我调用“screen”,%E 就会停止工作: 在此输入图像描述

知道这是什么原因以及如何解决吗?

colors gnu-screen terminal

2
推荐指数
1
解决办法
700
查看次数

在没有 TTY 的情况下附加到 cron 程序的最佳方法是什么

我的 ubuntu VM 不cron使用 TTY运行作业(即使我登录并从用户的 env 运行命令时也不运行)。

因此,cron 无法运行tmuxscreen,阻止程序(特别是rtorrent在这种情况下)以简单且可附加的方式在后台运行。

rtorrent在启动时运行程序的最佳方法是什么,同时可以轻松地从任何终端附加、分离和终止进程?

我假设只运行相当于rtorrent &应该做的事情,但这不如 screen/tmux 方便。

cron gnu-screen tmux tty

2
推荐指数
1
解决办法
3004
查看次数

找不到屏幕以及如何在没有网络和管理的情况下安装它?

我正在使用 LSF 作业系统开发 HPC。

screen在登录节点和大多数我可以通过 ssh 连接到它们的计算节点上工作正常。which命令显示screen位于/usr/bin. 但是,我发现了一些节点上,打坏只是找不到屏幕,神秘,我无法找到screen/usr/bin该节点上。但我必须使用它。

所以我想也许我可以安装一个本地版本的screen,所以我下载了这个screen-4.5.1.tar.gz包。但是,./configure因错误而终止

配置:检查tgetent...配置:检查libcurses...配置:检查libtermcap...配置:检查libtermlib...配置:检查libncursesw...配置:检查libtinfow...配置:检查libncurses...配置:检查 libtinfo... 配置:错误:!!!没有 tgetent - 没有屏幕

谷歌显示,我们需要或者sudo apt-get install libncurses-devsudo apt-get install ncurses-dev。但是,我不是管理员,而且我在 HPC 上没有互联网连接。所以我认为手动安装ncurses应该没问题。我下载了ncurses-6.0.tar.gz。配置、制作、安装,最后我在我的自定义文件夹中得到了 4 个文件夹myInstall_ncurses:bin、lib、include、shared。

但是我screen现在应该如何安装?我试过这个

./configure --bindir="/home/myInstall_ncurses/bin" --includedir="/home/myInstall_ncurses/include" --libdir="/home/myInstall_ncurses/lib"
Run Code Online (Sandbox Code Playgroud)

但错误是一样的。怎么了?

gnu-screen ncurses

1
推荐指数
1
解决办法
1402
查看次数

从 tmux 会话中分离除当前终端之外的所有其他终端

有没有办法从正在运行的tmux会话中分离所有终端,除了我实际使用的终端?

看起来有点奇怪,但这样做的意义在于为最终用户远程会话保留一些“持久性”层,同时确保用户仅在“一个外壳”上使用系统。

正如解释在这里,人们很容易根据用户名创建会话:

if [[ "$TMUX" == "" ]] &&
        [[ "$SSH_CONNECTION" != "" ]]; then
    # Attempt to discover a detached session and attach
    # it, else create a new session
    WHOAMI=$(whoami)
    if tmux has-session -t $WHOAMI 2>/dev/null; then
    tmux -2 attach-session -t $WHOAMI
    else
        tmux -2 new-session -s $WHOAMI
    fi
fi
Run Code Online (Sandbox Code Playgroud)

但我也想确保最后一个连接的终端是唯一一个仍然连接到用户tmux会话的终端。

它有办法做到这一点吗?我也接受基于screen(或其他多路复用器)的解决方案;)

login gnu-screen tmux session

1
推荐指数
1
解决办法
6114
查看次数

创建一个屏幕,在其中启动一个命令并分离

我想做一个自动执行此操作的单行 bash 命令:

screen -S myserver 
python myserver.py  # inside the new screen
CTRL A, D (detach)
Run Code Online (Sandbox Code Playgroud)

我认为这行不通:

screen -S myserver && python myserver.py
Run Code Online (Sandbox Code Playgroud)

因为python myserver.py将不会启动里面screen

command-line gnu-screen

1
推荐指数
1
解决办法
3409
查看次数

如何找到正在处理的屏幕会话

我广泛使用屏幕程序。通过减少每天设置会话所花费的时间,它极大地帮助了我。但是,现在我有 >8 个屏幕 - 我有时会忘记我在哪个屏幕。有没有办法找到我正在工作的屏幕会话的名称。 screen -ls 将列出所有屏幕会话。

有没有办法从所有当前活动的屏幕会话中分离出来 - 例如在一天结束时。

gnu-screen

0
推荐指数
1
解决办法
2167
查看次数

我在屏幕会话中按了 Ctrl+d,现在如何发送命令?

我试图Ctrlad,但惨遭失败并Ctrld改为输入,现在屏幕不会响应我的命令。它们出现了,并且在屏幕上运行的应用程序(我的世界服务器)仍然运行良好,但我无法发出服务器命令。

Ctrlad 工作并重新连接 screen -r -d -S minecraft工作正常,但没有命令注册。

有什么办法可以重新控制?

gnu-screen

0
推荐指数
1
解决办法
6271
查看次数

如何将终端显示的输出保存到txt文件?

我已经尝试过script但它不起作用。

milenko@milenko-desktop:~/MTM$ script output.txt
Script started, file is output.txt

milenko@milenko-desktop:~/MTM$ wc -l output.txt
0 output.txt
Run Code Online (Sandbox Code Playgroud)

由于执行 C 代码,我的屏幕上有超过 4000000 行。只是其中的一部分

4194282 0.166666 2.35285e-06 -56.2841 -137.299 -129.386 4 0.974001
4194283 0.166666 2.2536e-06 -56.4712 -129.67 -131.872 4 0.577388
4194284 0.166666 2.33943e-06 -56.3089 -131.649 -132.051 4 0.693404
4194285 0.166666 2.40782e-06 -56.1838 -139.678 -129.377 4 0.702479
4194286 0.166666 2.61584e-06 -55.8239 -125.733 -128.783 4 0.585886
4194287 0.166666 2.60877e-06 -55.8356 -129.239 -127.815 4 0.773082
4194288 0.166666 2.71129e-06 -55.6682 -129.591 -127.553 4 0.796556
4194289 0.166666 …
Run Code Online (Sandbox Code Playgroud)

gnu-screen files

0
推荐指数
1
解决办法
8250
查看次数

如何在 bash 中安全地转义变量字符串(用户输入)?

我有一个非常简单的类似聊天的工具,可以在 GNUscreen会话中运行。该screen窗口分成两部分,上部运行tail -f file.txt和底部运行具有下列内容的脚本:

#!/bin/bash
while : ; do
        read -p "Message: " msg
        ctime=$(date +"%H:%M:%S")
        echo "[${ctime}] User: ${msg}" >> file.txt
done
Run Code Online (Sandbox Code Playgroud)

非常简单,但可以根据我的要求完成工作。只有一个问题:当我按下ESC或 任何箭头键时,它会插入一个转义序列,^[[D例如。这会弄乱文件,导致糟糕的输出。

所以我的问题很简单:如何转义输入read以便写入文件是安全的?

我试过echo "[${ctime}] User: ${msg}" | strings >> file.txt这让它好多了,不再有大的混乱(例如没有被覆盖或错误地输出),但事情仍然不完美(例如输入te^[[Dst会变成te\n[Dst\n作为一个实际的新行) )。

bash gnu-screen string escape-characters

0
推荐指数
1
解决办法
904
查看次数