update_terminal_cwd在OS X的终端中做什么


21

我很困惑了一段时间。在$PROMPT_COMMANDOS X的bash中,有一个名为的命令update_terminal_cwd。我确信它不是内置的bash,很可能仅存在于OS X中。但是我不知道它到底在做什么。有谁知道?

Answers:


26

它更新提示以回显当前工作目录(CWD),并且在/etc/bashrc以下位置进行了定义:

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"
}

可能值得注意的是,仅当您在Apple Terminal应用程序中运行外壳程序时才定义该功能。如果您使用的是iTerm,则不会被定义。
nwinkler 2015年

Escape-7的用途到底是什么?它将打印到何处?在哪里记录?:)
通配符

1
@Wildcard这是xterm设置标题栏文本的控制代码。最易访问的文档可能是Linux Bash Prompt HowtoxtermIIRC 中提供了真实的文档。
三胞胎

2
此功能在的第9行中设置/etc/bashrc_Apple_Terminal(可通过此处学到的技巧找到)。但是我发现在一个屏幕会话中,$ PROMPT_COMMAND变成一个空字符串,这意味着/etc/bashrc_Apple_Terminal可能不再执行了。你知道为什么吗?
zyxue

1
@zyxue(如果您查看)/etc/bashrc,它使用变量$TERM_PROGRAM确定终端并运行相应的终端(/etc/bashrc_$TERM_PROGRAM如果存在)。因此,在屏幕会话中,$TERM_PROGRAM可能未设置,或者设置为以外的其他值Apple_Terminal
David Moles

-15

不透明的秘密编码格式字符串'\ e] 7;%s \ a'。疑似。

local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"

据我所知,“ file:// $ HOSTNAME”被掩盖了,所以您看不到远程协议:主机间谍活动。


1
...或$ HOSTNAME是一个变量,该变量会根据运行脚本的系统而变化。?!?多偏执?如果您认为其他答案中列出的代码除了可以打印到屏幕之外还可以执行其他任何操作,则不知道bash脚本的工作原理。
tubedogg 2014年

你没收到备忘录吗?-“ ShellShock” bash漏洞web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271在任何情况下1)未知来源,因为我没有设置环境变量'update_terminal_cwd'2)最重要的是,它是一个功能。自动怀疑。大量浸润。没有人想要。也许NIST将报告Apple OSX和浏览器Firefox / Chrome / Opera的“漏洞”?
user982671 2014年

7
您继续证明自己不知道自己在说什么。update_terminal_cwd不是环境变量,而是函数的名称。它以明文形式定义,/etc/bashrc并且该printf功能除了在屏幕上打印格式化的字符串外,不能执行任何其他操作。最后,您发布的vuln链接涉及通过将文本附加到环境变量定义中来执行任意功能……这与在此讨论的内容无关。浏览器与wtf和shell脚本有关吗?
tubedogg 2014年

这并不试图回答所提出的问题(请参见此处,详细分析以证明该陈述的正确性)。请为回答问题的答案保留答案框。谢谢!
DW

1
@tubedogg哈哈,是的,如果您只是执行一个typeset -f,它将显示所有“用户定义”功能,这就是弹出的方式。如果他们试图做一些粗略的事情,他们将不会轻易地使它可见。
Kolob Canyon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.