Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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
Macos 终端转义序列在OSX Mavericks 10.9DP7上不起作用_Macos_Terminal - Fatal编程技术网

Macos 终端转义序列在OSX Mavericks 10.9DP7上不起作用

Macos 终端转义序列在OSX Mavericks 10.9DP7上不起作用,macos,terminal,Macos,Terminal,当我尝试设置终端窗口标题时: $ echo -n "\033]0;foo\007" \033]0;foo\007 它只打印纯文本,终端标题没有变化。如何修复它?Bash的内置echo命令不再†支持-n选项,因为它不是POSIX选项。相反,使用printf命令发送控制字符:printf'\033]0;foo\007' 一般来说,最好使用printf来获得一致的结果,而不是echo来处理任何比使用ASCII图形字符打印字符串更复杂的事情,因为POSIXecho相当简单,而且任何扩展行为在shell

当我尝试设置终端窗口标题时:

$ echo -n "\033]0;foo\007"
\033]0;foo\007

它只打印纯文本,终端标题没有变化。如何修复它?

Bash的内置
echo
命令不再†支持
-n
选项,因为它不是POSIX选项。相反,使用
printf
命令发送控制字符:
printf'\033]0;foo\007'

一般来说,最好使用
printf
来获得一致的结果,而不是
echo
来处理任何比使用ASCII图形字符打印字符串更复杂的事情,因为POSIX
echo
相当简单,而且任何扩展行为在shell之间都可能有所不同


†我记不起它到底更改了哪个操作系统版本,但10.8中不支持它。

您缺少echo的
-e
,它告诉它解释反斜杠转义序列。试试这个:

$ echo -en "\033]0;foo\007"
尽管@chris page关于
-n
是非标准的说法是正确的,但是bash内置echo和system/bin/echo都支持
-n
。但是,系统echo不支持
-e
,这是尝试向终端发送转义码时真正的导入功能

还要注意,系统范围内的
/etc/bashrc
提示符命令设置为
更新终端cwd
,其定义如下:

update_terminal_cwd() {
    # Identify the directory using a "file:" scheme URL,
    # including the host name to disambiguate local vs.
    # remote connections. Percent-escape spaces.
    local SEARCH=' '
    local REPLACE='%20'
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
    printf '\e]7;%s\a' "$PWD_URL"
}
显然,苹果的Terminal.app的7设置了一个指向当前工作目录的特殊图标链接。您可以右键单击标题栏中的文件夹图标,在该位置打开Finder。此代码还通过在当前工作目录的最后一个组件前面加上前缀来稍微修改标题栏标题

我一直在研究Terminal.app的标签标题和标题栏标题是如何设置的。很明显,它们很好地遵循了“图标名称”是选项卡标题,“窗口标题”是标题栏标题

  • 标题栏标题是使用osc-2(或osc-0)设置的内容。如果osc-7设置了额外路径组件,则该组件将在标题栏标题之前。如果在“首选项->设置->窗口”中选中了任何组件,它们将附加到标题栏标题中
  • 选项卡标题是使用osc-1(或osc-0)设置的内容。如果未设置,则它将是首选项->设置->窗口的
    标题
    框的内容,并附加活动进程名称。如果标题正好是
    终端
    (无论是由首选项中的文本框设置还是由osc-1设置),则选项卡标题将只是活动流程名称

也许您使用的是bash以外的shell?例如,
/bin/sh
既不支持
-e
也不支持
-n
作为其内置
echo
的选项。系统二进制文件
/bin/echo
支持
-n
,但不支持
-e
。bash的内置
echo
支持
-e
-n
。我使用的是Bash3.2附带的OSX10.9.1,它支持
-en
,我也安装了4.2,它仍然支持这两种版本。虽然我认为OSX上的默认shell可能是
/bin/sh
,但请尝试使用
chsh-s/bin/bash
更改它,并打开一个新的终端。