Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有函数和ANSI控制序列的奇数寻源bash行为_Bash_Terminal - Fatal编程技术网

具有函数和ANSI控制序列的奇数寻源bash行为

具有函数和ANSI控制序列的奇数寻源bash行为,bash,terminal,Bash,Terminal,上述内容保存在名为testbash.txt的文件中,并按如下方式调用: 源testbash.txt 注释掉的行不能按预期工作。其他两个函数调用按预期工作。如何将主机名传递给函数tc?TC更改终端窗口中的选项卡名称,并在传递文本字符串(即TC hello)时按预期工作。如果代码不清楚,我可以提供更多信息 如果没有更多的信息(您使用的是哪个shell、主机名是什么、非工作行的输出是什么),很难准确地说出哪些内容被破坏了 一个可能的原因是您的ANSI控制序列被破坏(不完整),并且它后面的字符串部分或完

上述内容保存在名为testbash.txt的文件中,并按如下方式调用: 源testbash.txt


注释掉的行不能按预期工作。其他两个函数调用按预期工作。如何将主机名传递给函数tc?TC更改终端窗口中的选项卡名称,并在传递文本字符串(即TC hello)时按预期工作。如果代码不清楚,我可以提供更多信息

如果没有更多的信息(您使用的是哪个shell、主机名是什么、非工作行的输出是什么),很难准确地说出哪些内容被破坏了

一个可能的原因是您的ANSI控制序列被破坏(不完整),并且它后面的字符串部分或完全被它吞没,这取决于终端的实现和字符串是什么

我不确定你想用
\033]0做什么。我猜这与颜色或字体大小有关,在这种情况下,您可能会寻找
\033[0m
(“重置颜色”序列)。控制序列以“
m
”结尾,并使用“
”作为可能参数之间的内部分隔符(例如
\033[0;32;40m
指定字体宽度为0,前景色为32/绿色,背景色为40/黑色)

有许多在线资源可供您了解可能的控制序列。例如:

作为一般建议,请记住以下几点:

  • 引用tc的参数:
    tc“$(主机名)”
    (我还没有听说主机名包含空格,但这不会有什么坏处)
  • 注意
    echo
    -n
    参数,使其不输出新行。当您在终端上查看输出时,这可能会使您感到困惑,尤其是当您有一个带有控制字符的更奇特的提示,它可能“吃掉”您的当前行。要验证这一点,请在调用函数:
    tc”后生成新行$(主机名)“;echo
    -并查看它是否看起来更好
  • 确保
    hostname
    命令存在且可调用
  • 了解/计划脚本的用途。如果这将被用作另一个命令的输入,控制序列很可能会导致不期望的行为。即使使用
    testbash.txt | less
    也会出错,更不用说使用
    grep
    或其他解析工具了

编辑:您的控制序列旨在设置终端标题,并且看起来是正确的,如注释部分所指出的。请尝试上面的其他建议和/或提供其他信息。

那行怎么办?您的主机名是什么?将
set-x
添加到此脚本顶部,并添加
|cat-v;echo
到每个测试行的末尾,然后显示输出。
tc“$HOSTNAME”
应该可以工作,但是注释掉的版本也应该可以。祝你好运。这在.bashrc文件中。我对子字符串进行了一些实验。只要字符串不等于机器名,所有都可以工作,标题都会更改。如果字符串等于机器名,则不会显示任何内容(ssh)。认为这是iterm2,xterm问题。我将进行更多测试。如果您想了解
ESC]…
序列的作用,请在xterm控制序列文档中查找
OSC
:-问题中的序列是正确的;唯一的错误是将其称为“ANSI”谢谢,我不知道那类控制代码。
function tc() { echo -ne "\033]0;$1\007"; }

function justecho() { echo z$1$1z; }

HOSTNAME=$(hostname)

tc hello #works
#tc $(hostname)
justecho $(hostname) #works