我正在编写一个脚本,当我进入目录时,它会显示目录的 git 日志。这样的日志可能会让人不知所措,包含数百行。到目前为止,我一直将其限制为硬编码的 20 行 ( ... | head -n 20
),这在工作时的屏幕上很好,但在家里较小的 MacBook 屏幕上就太多了。
我希望日志在任一终端上占据大约一半(垂直)屏幕。并且“终端”也发生了变化:它在工作中是 Gnome 终端,但在家里是 iTerm2。而且我不使用屏幕或 tmux。
如何从命令行找到终端中可用的垂直线数?
我找到了这个网站;它有包含所有艺术品的zip 文件(主页上的链接)。其中一些具有.ans
扩展名,它们看起来像在 Linux/Unix 上使用的 ANSI 转义码,但是当我cat
在 XFce 终端中使用打开其中一个时,它会产生垃圾(但是是彩色的)。它们看起来不像图片库。
链接中主要图稿的第一行如下所示(从 Emacs 复制):
[0;1m[30mthere is no substitute [0;33mÜܲ[1;43m°±²²[40mÛ[43mÛ²±[0;33mÝ ßÜ[1;43m²²²[40mÛÛ²[40m[K
Run Code Online (Sandbox Code Playgroud)
文件类型是 DOS,但它们只能在 Windows 上创建。
在搜索 ANSI 艺术时,我还发现该网站的zip 文件仅包含带有.ans
扩展名的文件,而且它们在 Linux 上也无法正确呈现(第 2 页的画廊)。
我的问题是:
我目前设置$TERM
为xterm-256color
:
if [[ -n "$EMACS" ]]; then
export TERM=xterm-256color
alias emacs="emacsclient --no-wait"
export EDITOR="emacsclient --no-wait"
export VISUAL="emacsclient"
fi
Run Code Online (Sandbox Code Playgroud)
我曾经将它设置为eterm-color
,但问题是这种终端类型在我通过 SSH 登录的大多数机器上不可用。
.bashrc
Ubuntu 中的默认值检查TERM
变量是否以开头xterm-
,在这种情况下,它会尝试设置窗口标题:
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
Run Code Online (Sandbox Code Playgroud)
问题是\[\e]0;
一点。它应该由 xterm 兼容的终端模拟器解析,但 emacs (ansi-term) 不这样做。其结果是这样的终端:
0;user@host: ~user@host:~$
Run Code Online (Sandbox Code Playgroud)
readline
当输入的文本大于终端的宽度时,它也会使用,破坏一些应用程序。
因为eterm-color
在某些远程主机上不可用(而且我也无法安装它),将其设置为该值会使less
.
有什么我可以使用的技巧,例如大多数发行版附带的另一种终端类型,或者使 ansi-term 识别相关转义码并设置标题的黑客,或者只是丢弃它们?
我有一个 stm32f1 控制的设备,它使用 USART/USB 端口来实现用户控制界面。使用标准终端软件(putty/minicom),用户可以在设备外壳中输入简单的命令。
有一个问题。如果有许多传入的信息包,它们会通过 shell 提示打印,从而使输入新命令变得困难。
我计划将终端屏幕拆分为两个区域:一行提示和一个用于传入数据包的可滚动区域。
我尝试使用以下转义序列:
162 72 r * DECSTBM - Set top and bottom margins (scroll region on VT100)
[4;20r = Set top margin at line 4 and bottom at line 20
Run Code Online (Sandbox Code Playgroud)
但仍然找不到一个很好的教程,它描述了一种可以帮助我解决问题的正确方法。
我正在使用以下行tmux
来获取 GNU Screen 中的“硬拷贝”功能:
bind H capture-pane \; save-buffer -b 0 ~/tmux.hardcopy \; delete-buffer -b 0
Run Code Online (Sandbox Code Playgroud)
但是,ANSI 颜色不会被捕获到文件中。如何tmux
保存 ANSI 转义序列,以便硬拷贝也有颜色?
我正在研究使用 ANSI 代码的 shell 脚本,发现由于某种原因,根据您的终端/操作系统支持不同的转义代码。
在某些情况下,我意外地得到了未解析的垃圾转储,我假设这意味着我的终端(在 Mac OS 上)不支持所使用的转义代码,尽管在很多地方都读到了这些含义相同的内容:
27 = 033 = 0x1b = ^[ = \e
Run Code Online (Sandbox Code Playgroud)
在搜索中,我发现了有关检测斜杠转义支持的问题。
所选答案嗅探$TERM
要检测的值
case $TERM in
(|color(|?))(([Ekx]|dt|(ai|n)x)term|rxvt|screen*)*)
PS1=$'\e\]0;$GENERATED_WINDOW_TITLE\a'"$PS1"
esac
Run Code Online (Sandbox Code Playgroud)
但我想知道这有多可靠。
是否有一种标准方法来检查转义码支持(主要针对 Bash),或者该脚本几乎是常规的?
对于其他寻找信息的人来说,这也是一本很好的读物。
当您在 Linux 上运行 cal 时,当月的输出将反转视频突出显示当天。当我将该输出发送到 hexdump -c 时,我得到了一些有趣的结果:
0000000 N o v e m b e r 2 0 1 6
0000010 \n S u M o T u
0000020 W e T h F r S a \n
0000030 1 2 _ \b _ \b 3
0000040 4 5 \n 6 7
0000050 8 9 1 0 1 1 1 2 \n
0000060 1 3 1 4 1 5 1 6 1 7 1
0000070 8 1 9 \n …
Run Code Online (Sandbox Code Playgroud) 使用选项set -x
,每个命令在执行前都会回显到 STDERR,并以扩展的 为前缀$PS4
,并根据调用堆栈深度重复第一个字符。
我希望提示的输出$PS4
是彩色的。即在哪里
(set -x; ls -l)
Run Code Online (Sandbox Code Playgroud)
当前将打印
+ ls -l
Run Code Online (Sandbox Code Playgroud)
我想要一个输出
\033[90m+ ls -l\033[0m
\ \
\ `- Reset color
`- Muted gray
Run Code Online (Sandbox Code Playgroud)
然而,由于 PS4 在回显命令之前被打印,我想不出在执行命令\033[0m
之前重置颜色的方法。
有可能以某种方式做到这一点吗?
根据Bash 提示:颜色和格式(ANSI/VT100 控制序列)我试图在我的程序中激活闪烁代码,但可能是闪烁代码已被消除。这是真的吗?
如果不正确,请帮助我使用闪烁代码。