短时间后自动退出 less

短时间后自动退出 less

我使用 less 查看包含敏感信息的命令的文本输出。Less 非常适合此用途,因为它使用备用屏幕并在使用后将其清除。我希望 less 会话在短时间(例如 5 分钟)后退出。

是否有任何简单的命令行方法可以使用管道文本调用 less 并让它在 5 分钟后自动退出?

答案1

假设您有 GNU coreutils,一种简单的方法是在此类敏感命令中替换less为。timeout --foreground 600 less; printf '\033[?47h'; clear; printf '\033[?1049l'; stty cooked echotimeout命令在给定的持续时间后终止进程,--foreground开关允许less使用 TTY,并stty cooked echo在终止后修复终端less。如果终止less阻止了备用屏幕的清除和退出,则干预命令会执行此操作。

命令中使用的转义序列printf适用于兼容 DEC 的终端(模拟器),例如 Xterm。您的特定终端可能使用不同的顺序来完成此任务。

一个简单的函数:

tless () {
  timeout --foreground 600 less "$@"
  printf '\033[?47h' # Enter alternate screen
  clear
  printf '\033[?1049l' # Exit alternate screen and restore cursor
  </dev/tty stty cooked echo # Use in a pipe requires specifying the TTY
}

可以大大减少打字次数。


感谢@meuh 指出原始版本可能无法清除或退出备用屏幕。

编辑为允许tless some-file.此外,该版本已经在 Linux 和 Solaris 11 上进行了测试。

相关内容