function tc() { echo -ne "\033]0;$1\007"; }
function justecho() { echo z$1$1z; }
HOSTNAME=$(hostname)
tc hello #works
#tc $(hostname)
justecho $(hostname) #works
以上内容保存在名为testbash.txt的文件中,调用如下: source testbash.txt
注释掉的行无法按预期工作。另外两个函数调用按预期工作。如何将主机名传递给函数tc? TC在终端窗口中更改选项卡名称,如果传递了文字字符串(即tc hello),则按预期工作。如果代码不清楚,我可以提供更多信息。
答案 0 :(得分:0)
如果没有更多信息(你正在使用哪个shell,你的主机名是什么,非工作行的输出是什么),很难说出究竟是什么破坏了。
可能的原因是您的ANSI控制序列被破坏(不完整),并且它的部分或完全吞下了它后面的字符串,具体取决于您的终端的实现以及字符串是什么。
我不确定你要对\033]0;
做些什么。我猜测它与颜色或字体大小有关,在这种情况下,您可能正在寻找\033[0m
(“重置颜色”序列)。控制序列以“m
”结尾,并使用“;
”作为可能参数之间的内部分隔符(例如\033[0;32;40m
指定字体宽度为0,前景色为32 /绿色和背景色40 /黑)。
在线资源很多,您可以了解可能的控制序列。例如:Using ANSI color codes。
作为一般建议,请记住这些:
tc "$(hostname)"
(我还没有听说过包含空格的主机名,但它不会受到伤害)。-n
的{{1}}参数,使其不输出新行。当您查看终端上的输出时,这可能会使您感到困惑,特别是如果您有一个带有控制字符的更高级提示,可能“吃掉”您当前的线路。要验证这一点,请在调用函数后生成一个新行:echo
- 并查看它是否更好。tc "$(hostname)"; echo
命令存在并且可以调用hostname
也会出错,更不用说使用testbash.txt | less
或其他解析工具了。编辑:您的控制序列旨在设置终端标题并且看起来正确,如评论部分所述。请尝试上述其他建议和/或提供其他信息。