Bash 脚本 ctrl+c 错误

Bash 脚本 ctrl+c 错误

我有日志文件系统,它用当前时间重命名最新的日志文件,我必须设置一个 less 命令才能轻松检查日志文件。我可以用 q 退出 less 命令,但我必须遵循最新的传入行,因此按下 shift+fq 后不起作用,我需要用 ctrl+c 退出。

当我按下 ctrl+c 主屏幕时,进程被终止,但终端屏幕出现错误,如下所示

终端错误

find /data/tomcat/logs/out.* -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" " |xargs less

我可以用重置清除错误,但这样使用实在是太荒谬了。我在网上搜索时,大多数人都解释说 ctrl+c 可以终止主命令,但脚本不会响应 SIGINT。尝试了很多方法,但都无法成功终止这个简单的脚本。

并且无法创建别名,因为某些参数出现错误,但是当我在终端上运行此命令时,它工作正常。

我知道使用 logger rotate 重命名旧文件并保留同名的最新文件会更容易,但这不会发生。

答案1

在运行 less 时按下 shift-F 会进入跟随模式。按 Ctrl-C 退出此模式,然后按 Q 退出。

听起来好像当您退出命令时终端回显被禁用。这与运行 时发生的情况相同stty -echo。要重置终端,您可以键入stty sane。您必须盲目输入,因为您无法看到自己输入的内容,但它应该可以工作。

如果您无法从提供的命令行创建别名,请尝试将其放入文件中并使其可执行,然后确保该脚本文件在您的路径中,或创建别名来运行它。您可能还想在脚本中添加第二行,stty sane以确保在 less 命令退出时启用终端回显。类似这样的操作应该有效:

#!/bin/bash
find /data/tomcat/logs/out.* -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" " |xargs less
stty sane

相关内容