gpt4 book ai didi

ruby - 如何使用 ANSI 转义序列在 bash 中捕获终端窗口的标题?

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:37 25 4
gpt4 key购买 nike

我在 OSX 中使用 bash 命令行。我知道 ANSI 转义序列\033[21t 将检索当前终端窗口的标题。所以,例如:

$ echo -ne "\033[21t"
...sandbox...
$ # Where "sandbox" is the title of the current terminal window
$ # and the ... are some extra control characters

我想做的是在脚本中以编程方式捕获此信息,但我不知道该怎么做。脚本捕获的只是原始的 ANSI 转义序列。因此,再举个例子,这个小的 Ruby 脚本:

cmd = 'echo -ne "\033[21t"'
puts "Output from echo (directly to terminal):"
system(cmd)
terminal_name=`#{cmd}`
puts "\nOutput from echo to variable:"
puts terminal_name.inspect

产生以下输出:

Output from echo (directly to terminal):
^[]lsandbox^[\
Output from echo to variable:
"\e[21t"

我希望第二种情况下的信息与终端上显示的信息相匹配,但我得到的只是原始命令序列。 (我试过使用 system() 并将输出捕获到一个文件——这也不起作用。)有谁知道如何让它工作?

最佳答案

详细here你必须使用肮脏的技巧才能让它发挥作用。

这是修改后的脚本:

#!/bin/bash
# based on a script from http://invisible-island.net/xterm/xterm.faq.html
exec < /dev/tty
oldstty=$(stty -g)
stty raw -echo min 0
# on my system, the following line can be replaced by the line below it
echo -en "\033[21t" > /dev/tty
read -r x
stty $oldstty
echo $x

关于ruby - 如何使用 ANSI 转义序列在 bash 中捕获终端窗口的标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4471278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com