小编rr-*_*rr-的帖子

如何防止随机控制台输出破坏终端?

SE 上有很多问题显示了如何从被cat /dev/urandom. 对于那些不熟悉这个问题的人 - 这里是关于:

  1. 您执行cat /dev/urandom或等效(例如,cat binary_file.dat)。
  2. 垃圾被打印出来。
  3. 那没问题……除非您的终端在命令完成继续打印垃圾!这是实际上是 g++ 输出的错误渲染文本的屏幕截图:

    示例截图

    我想人们对 C++ 错误有时太神秘的看法是正确的!

通常的解决方案是 run stty sane && reset,尽管每次发生这种情况时都运行它有点烦人。

正因为如此,我想在这个问题中关注的是发生这种情况的原始原因,以及在发出此类命令后如何防止终端中断。我不是在寻找解决方案,例如将有问题的命令通过管道传递给tror xxd,因为这要求您在实际运行/打印之前知道程序/文件输出二进制文件,并且每次碰巧输出此类数据时都需要记住.

我注意到 URxvt、PuTTY 和 Linux 帧缓冲区中的相同行为,所以我认为这不是特定于终端的问题。我的主要怀疑是随机输出包含一些翻转字符编码的 ANSI 转义码(事实上,如果你cat /dev/urandom再次运行,它可能会打开终端,这似乎证实了这个理论)。如果这是正确的,这个转义码是什么?是否有任何标准方法可以禁用它?

terminal escape-characters output

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

立即停止在 SSH 会话中运行的程序的输出

问题

我执行通过 SSH 输出大量信息的命令。例如,我愚蠢地在执行数百万次的循环中添加调试信息,或者只是cat /dev/urandom为了踢球而运行。

终端充斥着信息。

举例说明我在说什么

我想尽快终止命令并修复我的程序。我不在乎它打印什么。现在,问题是我按Ctrl+ CASAP(在上面的示例中,我在运行命令后立即按了它),但是打印我什至不需要的所有信息仍然需要时间

我试过的

我尝试按Ctrl+C如此努力,以至于当终端终于赶上时它产生了有趣的结果:

OUTPUT HERE^C
rr-@burza:~/xor$ ^C
rr-@burza:~/xor$ ^C
rr-@burza:~/xor$ ^C
^C^C

^C^C^C^C^C^C^C^C^C^C^C
^C^C^C^C^C^C^C^C^C^C
^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C
^C^C^C^C^C^C^C
^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C
^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C
^C^C^C^C^C^C^C^C^C^C^C^C^C
rr-@burza:~/xor$ ^C
rr-@burza:~/xor$ ^C
rr-@burza:~/xor$ ^C
rr-@burza:~/xor$ ^C
rr-@burza:~/xor$ ^C
rr-@burza:~/xor$ ^C
rr-@burza:~/xor$ ^C
rr-@burza:~/xor$ ^C
rr-@burza:~/xor$ ^C
Run Code Online (Sandbox Code Playgroud)

我还阅读了关于Ctrl+S显然是用来告诉终端“停止输出,我需要赶上”但显然它什么都不做。

杂项详情

我不想改变我运行的命令,这样我就可以在任何情况下自救,即使我不记得我运行的程序可能会像那样结束。

我的 SSH 客户端CYGWIN_NT-6.1-WOW64 luna 1.7.30(0.272/5/3) 2014-05-23 10:36 i686 Cygwin在 MinTTY 中的Cygwin( ) 上运行,终端类型设置为xterm-256color …

ssh terminal cygwin

18
推荐指数
2
解决办法
2万
查看次数

收到有关窗口标题更改的通知

...没有投票。

我想检测当前聚焦的窗口何时发生变化,以便我可以更新系统中的一个自定义 GUI。

兴趣点:

  • 实时通知。有 0.2 秒的延迟是可以的,有 1 秒的延迟是可以的,有 5 秒的延迟是完全不可接受的。
  • 资源友好性:出于这个原因,我想避免轮询。xdotool getactivewindow getwindowname每隔半秒运行一次,效果很好……但是每秒生成 2 个进程对我的系统来说是否友好?

在 中bspwmbspc subscribe每次窗口焦点发生变化时,都可以使用它打印一行包含一些(非常)基本统计信息的行。这种方法一开始看起来不错,但是监听它不会检测到窗口标题何时自行更改(例如,以这种方式更改 Web 浏览器中的选项卡将不会被注意到。)

那么,在 Linux 上每半秒产生一个新进程是否可以,如果不是,我该如何做得更好?

我想到的一件事是尝试模仿窗口管理器的作用。但是我可以独立于工作窗口管理器为诸如“窗口创建”、“标题更改请求”等事件编写钩子,还是我需要自己成为窗口管理器?我需要root吗?

(我想到的另一件事是查看xdotool的代码并仅模拟我感兴趣的事情,这样我就可以避免所有进程产生样板,但它仍然会进行轮询。)

window-manager xorg

10
推荐指数
2
解决办法
2751
查看次数

如何打开 thunar 以便它选择特定文件?

就像标题一样。在 Windows 上,我可以这样做:

explorer /select,"C:\folder\file.txt"
Run Code Online (Sandbox Code Playgroud)

这将导致打开explorer.exe,即会立即打开C:\folder并选择file.txt

我相信 ROX 也有这个功能。

我可以对 thunar 做同样的事情吗?

thunar

6
推荐指数
2
解决办法
2077
查看次数

在 pacman 中垂直格式化包

假设我有一段时间不升级系统了。一旦我最终运行pacman -Syu,我显然会收到很多包裹。在这种情况下,输出是完全不可接受的 - 所有包都写在一行中,没有任何对齐方式,只有简单的换行。

那么,我可以pacman像 那样以列的形式显示包ls -C,或者至少像 那样垂直地显示包ls -1吗?

到目前为止,我一直在使用pacman -Syu --print-format '%n %v',但这是次优的(特别是传递--print-format强制pacman在空运行模式下运行,所以我实际上需要pacman -Syu在检查包后再次运行)。编写包装脚本,或者切换到另一个前端,感觉有点矫枉过正。

pacman

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