草庐IT

linux - (tcsh) xterm 标题栏的 postcmd 别名打破了更少的文本编辑器

coder 2023-06-21 原文

我设置我的 tcsh xterm 以使用上次运行的命令的名称和目录更新“postcmd”上的标题栏。

这与我所拥有的相似(要重现的最小示例):

alias postcmd 'echo -n "\033]0;hello_world\007";'

(请注意,这个别名在我的 .cshrc 文件中。如果我在命令行中键入它,它会 100% 正常工作)

这成功地将 xterm 标题栏更新为在我运行的每个命令后显示“hello_world”,less 除外当我运行 less 时,我得到以下终端输出:

>less abc.txt ESC]0;hello_world^GESC]0;hello_world^GESC]0;hello_world^GESC]0;hello_world^GESC]0;hello_world^GESC]0;hello_world^GESC]0;hello_world^GESC]0;hello_world ^GESC]0;hello_world^GESC]0;hello_world^GESC]0;hello_world^GESC]0;hello_world^GESC]0;hello_world^G... (结尾)

该文件从未真正打开过,它只是打印了这个垃圾字符串,我必须按 CTRL-C 来取消它。铃声或转义字符是否以某种方式搞乱了 less 的初始化?知道如何修改它以不破坏 less 吗?我可以轻松地使用另一个编辑器,但有时我需要与其他工程师共享我的控制台进行调试,如果他们选择运行 less,我不想让他们感到困惑。

这是我正在使用的实际代码,它与简单的 hello_world 示例存在相同的问题:

alias postcmd 'set HIST = `history -h 1`; printf "\033]0;%s\007" "xterm: $HIST @ $cwd ";'

=====编辑===== 一些附加信息:

> alias less
> echo $LESS
LESS: Undefined variable
> echo $TERM
xterm
>less --version
less 382
Copyright (C) 2002 Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less

>tcsh --version
tcsh 6.13.00 (Astron) 2004-05-19 (x86_64-unknown-linux) options 8b,nls,dl,al,kan,rh,color,dspm,filec

=== 更多编辑 ===

在进一步调试时,我发现只有当我将命令放入 .cshrc 文件时才会出现问题。如果我取消注释 .cshrc 中的别名,并在命令行中简单地键入别名,那么它可以与 less 一起正常工作。

此外,将别名放入我的 .cshrc 中,如果我取消别名,即使取消别名后它仍然不会中断。所以看起来问题不是来自别名的存在,而是来自在终端创建时执行 .cshrc 时被别名?

最佳答案

根据 this link ,问题只存在于 Red Hat 机器上

来自他们的网站:

“less”命令

当我尝试使用 less 命令时,我看到的不是文件内容,而是通常只有在登录时才会看到的消息。我该如何解决这个问题?

如果您的主目录中的 .cshrc、.profile 或任何其他 shell 启动文件打印任何文本,less 将显示该文本而不是您的文件。 要摆脱这种行为,请在实际打印任何内容之前测试是否可以写入标准输出。例如,假设您正在使用 tcsh shell,并且您已将以下语句放入 .cshrc 文件中:

echo ".cshrc here"
echo "I am logged on to machine $hostname"

将其替换为:

 # "-t 1" is true only if standard output is enabled;
 # if not, then don't write any messages.
 if ( -t 1 ) then                                              
    echo ".cshrc here"
    echo "I am logged on to machine $hostname"
 endif

sh 风格 shell 中的等效测试:

 if [ -t 1 ]; then
    echo ".profile here"
    echo "I am logged on to machine $hostname"
 fi

常见问题中的常见问题:为什么 less 会这样做?

在 RedHat Linux 中,除了纯文本之外,less 还可以显示其他类型的文件。例如,如果您键入:

less ${NevisAppBase}/src/archive-tar/gcc-2.95.2.tar.gz

您将在 gcc-2.95.2.tar.gz 中看到压缩文件列表,而不是二进制垃圾。但是,要启用此功能,less 必须调用子 shell。如果该子 shell 将任何内容写入标准输出,您将看到该输出而不是您的文件。

关于linux - (tcsh) xterm 标题栏的 postcmd 别名打破了更少的文本编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9470198/

有关linux - (tcsh) xterm 标题栏的 postcmd 别名打破了更少的文本编辑器的更多相关文章

  1. ruby-on-rails - 使用 Rmagick 或 ImageMagick 在背景上放置标题 - 2

    我有一张背景图片,我想在其中添加一个文本框。我想弄清楚如何将标题放置在其顶部的正确位置。(我使用标题是因为我需要自动换行功能)。现在,我只能让文本显示在左上角,但我需要能够手动定位它的开始位置。require'RMagick'require'Pry'includeMagicktext="Loremipsumdolorsitamet"img=ImageList.new('template001.jpg')img 最佳答案 这是使用convert的ImageMagick命令行的答案。如果你想在Rmagick中使用这个方法,你必须自己移植

  2. ruby - 我可以删除 Ruby 中的方法别名吗? - 2

    假设我有一段Ruby代码,我想在其中为一个方法设置别名(我不知道为什么;让我们假设我有一个很好的理由)。classStringalias_method:contains?,:include?end我可以在本节之后删除这个别名吗? 最佳答案 remove_method在大多数情况下应该有效。但是,如果您的alias_method覆盖了现有方法,您可能需要通过单独的alias_method调用来保存原始方法。#assuming:contains?isalreadyamethodalias_method:original_contains

  3. ruby - 如何跳过 CSV 文件的第一行并将第二行作为标题 - 2

    有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|

  4. ruby-on-rails - 尝试打开 .gitignore 以在文本编辑器中对其进行编辑,但在 OS X Mountain Lion 上找不到文件位置 - 2

    我使用“newapp_name”创建了一个新的Rails应用程序,我正在尝试编辑.gitignore文件,但在我的应用程序文件夹中找不到它。我在哪里可以找到它?我安装了Git。 最佳答案 .gitignore位于项目的root中,而不是app子目录中。首先打开终端并进入您的目录。您需要使用ls-a来显示stash文件。然后使用打开.gitignore 关于ruby-on-rails-尝试打开.gitignore以在文本编辑器中对其进行编辑,但在OSXMountainLion上找不到文件位

  5. 【Linux操作系统】——网络配置与SSH远程 - 2

    Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好

  6. Linux磁盘分区中物理卷(PV)、卷组(VG)、逻辑卷(LV)创建和(LVM)管理 - 2

    文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分

  7. ruby-on-rails - 如何获取调用别名方法的名称? - 2

    我有一个名为link_to_admin的方法然后我给另一个方法取了别名simple_link_todeflink_to_admin(name,url,options={})#Mystuffherelink_to(name,url,options)endalias_method:simple_link_to,:link_to_admin如果我调用link_to_admin,我会遇到一个问题,我想将值打印到标记例如deflink_to_admin(name,url,options={})#Mystuffheremenu=""menu#{link_to(name,url,options)}"

  8. ruby - 如何在 Ruby 中获取 linux 系统信息 - 2

    如何在Ruby中获取linux系统(这必须适用于Fedora、Ubuntu等)的软件/硬件信息? 最佳答案 Chef背后的优秀人才,拥有一颗名为Ohai的优秀gemhttps://github.com/opscode/ohai以散列形式返回系统信息,例如操作系统、内核、规范、fqdn、磁盘、空间、内存、用户、接口(interface)、sshkey等。它非常完整,非常好。它还会安装命令行二进制文件(也称为ohai)。 关于ruby-如何在Ruby中获取linux系统信息,我们在Stack

  9. ruby-on-rails - 如何在 vim 编辑器中使用 bundler 打开 gem 源代码 - 2

    尝试使用bundleopen命令打开gem源代码,accordingtoofficialdocumentationandinstruction.因此,我在.profile中导出编辑器:exportBUNDLER_EDITOR=viexportEDITOR=vi并尝试打开例如rails使用控制台的源代码:bundleopenrails出现错误CouldnotlocaleGemfile[ruby-2.1.1][~/]$:rails-vRails4.0.3[ruby-2.1.1][~/]$:bundle-vBundlerversion1.5.3[ruby-2.1.1][~/]$:bundle

  10. ruby - rbenv:在 Linux Mint 上找不到 gem 命令 - 2

    我在LinuxMint17.2上。我最近使用apt-getpurgeruby​​删除了ruby​​。然后我安装了rbenv然后rbenvinstall2.3.0所以现在,~/.rbenv/versions/2.3.0/bin/ruby存在。但是现在,我无法执行geminstallrubocop。我明白了:$geminstallrubocoprbenv:gem:commandnotfoundThe`gem'commandexistsintheseRubyversions:2.3.0但是我可以~/.rbenv/versions/2.3.0/bin/geminstallrubocop。但是,

随机推荐