如何从脚本中识别终端?

Tha*_*tos 8 terminal.app iterm2 macos

不要说“ $TERM”——它总是xterm

bash脚本如何知道它在哪个终端上运行,特别是它是 iTerm、Terminal.app 还是实际上是 xterm?

我问是因为reset在 Terminal.app 和 iTerm2 上不能立即使用¹。但是,iTerm2 确实可以识别用于执行终端重置 ( \x1b]50;ClearScrollback\x07)的转义序列,并且如果我能检测到它,我可以reset使用执行正确操作的别名进行覆盖。AFAICT,Terminal.app 缺乏重置序列,人们诉诸荒谬的 tom-hackery 来破解它

我的最终目标是,reset无论我是在 OS X 还是 Linux 上工作,在本地工作还是通过 SSH 远程工作,都能实现相同的工作。(我不想必须尝试记住哪个,并且这样做很有用,reset && command-that-outputs-a-bunch并且有向上输入的工作。)Terminal.app 和 iTerm 由于没有reset正确实施而在这个计划中投入了扳手。

这意味着简单地覆盖reset还不够:如果我在 Linux 机器上,它需要知道我是使用gnome-terminal还是 iTerm 以发送正确的转义序列。

有什么办法(即使我需要一个ioctl)询问终端是什么真的是?

¹出于此问题的目的,重置应清除屏幕、重置光标并擦除回滚缓冲区。

Dan*_*eck 10

使用$TERM_PROGRAM.

iTerm 将其设置为iTerm.app,并将 Terminal.app 设置为Apple_Terminal

  • @Thanatos `sshd_config` 的 `AcceptEnv` 可能。由于这是非常重要的信息(您的 shell 运行在与终端运行的主机不同的主机上),因此它确实应该成为问题的一部分。 (2认同)