从 .tcshrc 设置终端标题后,less 命令停止工作

从 .tcshrc 设置终端标题后,less 命令停止工作

将以下命令添加到我的~/.tcshrc

echo "\033]0;${PROJECT_NAME}\007"

less新打开的命令停止gnome-terminal正常工作。但more命令不受影响。

这是我在尝试运行less命令时看到的内容:

less log

ESC]0;MYPROJ^G
log (END) 

答案1

less可能配置为通过管道lesspipe或类似的脚本传输其输出。如果设置了环境变量LESSOPEN和/或LESSCLOSE,或者在文件中使用了等效设置,则会发生这种情况~/.lesskey。您的输出~/.tcshrc与管道数据混合并导致混乱。

~/.tcshrc显然在为没有 TTY 的 shell 执行时也运行您添加的命令。这会导致您遇到的问题,并且还可能导致scprsync许多其他命令出现问题。如果要将生成屏幕输出的命令添加到您的.tcshrc或类似的 shell 启动脚本中,则应始终使该命令有条件,以便它仅在交互式和/或具有 TTY 的会话上运行。

解决此问题的最简单方法是将您的任何输出限制~/.tcshrc交互的仅 shell 会话。即会显示 shell 提示符的。您可以通过使输出有条件来实现,即将添加的单行替换.tcshrc为:

if ($?prompt) then
    echo "\033]0;${PROJECT_NAME}\007"
fi

在设置任何自定义提示之前添加此内容。

另一种方法是先静默测试 TTY 的有效性:

tty -s && echo "\033]0;${PROJECT_NAME}\007"

相关内容