Rom*_*ich 1 less tcsh xterm gnome-terminal
在我将以下命令添加到我的之后~/.tcshrc:
echo "\033]0;${PROJECT_NAME}\007"
Run Code Online (Sandbox Code Playgroud)
less新打开的命令gnome-terminal停止正常工作。但more命令不受影响。
这是我在尝试运行less命令时看到的:
less log
ESC]0;MYPROJ^G
log (END)
Run Code Online (Sandbox Code Playgroud)
您less可能已配置为通过管道lesspipe或类似的脚本来传输其输出。如果设置了环境变量LESSOPEN和/或LESSCLOSE设置,或者在~/.lesskey文件中使用了等效设置,则会发生这种情况。您的输出~/.tcshrc与管道数据混合并导致混乱。
~/.tcshrc在为没有 TTY 的 shell 执行时,您显然也会运行您添加的命令。这会导致您看到的问题,也可能会导致scp,rsync或许多其他命令出现问题。如果您想向您的.tcshrc或类似的 shell 启动脚本添加一个生成屏幕输出的命令,您应该始终使命令有条件,以便它仅在交互式和/或具有 TTY 的会话上运行。
要解决这个问题,最简单的办法是限制你的任何输出~/.tcshrc到互动仅shell会话。即会显示 shell 提示的那些。您可以通过使输出有条件来实现,即将添加的单行替换为.tcshrc:
if ($?prompt) then
echo "\033]0;${PROJECT_NAME}\007"
fi
Run Code Online (Sandbox Code Playgroud)
在设置任何自定义提示之前添加此项。
另一种方法是先默默地测试 TTY 的有效性:
tty -s && echo "\033]0;${PROJECT_NAME}\007"
Run Code Online (Sandbox Code Playgroud)