kar*_*man 75 terminal bash terminal.app macos
如何让 OS X 中的 Terminal.app 在其窗口或选项卡标题中显示当前目录?
我正在使用 bash shell。
Dar*_*all 63
取决于你的外壳。
此文章显示多种方法。
我个人使用 zsh,它有一个方便的 precmd() 函数,它在每个提示之前运行。
precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt
Run Code Online (Sandbox Code Playgroud)
尽管其他问题列出了 bash 方法,但它们的别名是 cd。Bash 提供了一种内在的方法,它只链接提示。
猛击
bash 提供了一个变量 PROMPT_COMMAND,其中包含要在提示之前执行的命令。此示例(插入到 ~/.bashrc 中)将标题设置为“用户名@主机名:目录”:
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
Run Code Online (Sandbox Code Playgroud)
其中\033 是ESC 的字符代码,\007 是BEL 的字符代码。请注意,这里的引用很重要:变量在“...”中展开,而不是在“...”中展开。所以 PROMPT_COMMAND 被设置为一个未扩展的值,但是当使用 PROMPT_COMMAND 时,“...”中的变量会被扩展。
但是,PWD 会生成完整的目录路径。如果我们想使用 '~' 简写,我们需要在提示中嵌入转义字符串,这允许我们利用 shell 提供的以下提示扩展:
\u expands to $USERNAME
\h expands to hostname up to first '.'
\w expands to directory, replacing $HOME with '~'
\[...\] embeds a sequence of non-printing characters
Run Code Online (Sandbox Code Playgroud)
因此,下面会产生一个提示“bash$”和一个 xterm 标题“username@hostname: directory”...
case $TERM in
xterm*)
PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
;;
*)
PS1="bash\$ "
;;
esac
Run Code Online (Sandbox Code Playgroud)
请注意 [...] 的使用,它告诉 bash 在计算提示的宽度时忽略非打印控制字符。否则在放置光标时行编辑命令会混淆。
All*_*one 34
复制并粘贴到文件 ~/.profile 中:
PROMPT_COMMAND="echo -ne \"\033]0;${PWD##*/}\007\"; $PROMPT_COMMAND"
这会将当前终端选项卡的标题设置为您所在文件夹的名称(不是整个路径)。
所以......
Developer/Applications/Utilities/Bluetooth/
变成=>Bluetooth
Chr*_*age 12
从 Mac OS X Lion 10.7 开始,终端具有用于设置工作目录的显式转义序列,终端使用标准窗口“代理”图标显示该目录。这使您可以按住 Command 键单击它以查看路径、在 Finder 中显示或像任何其他文件夹一样拖动它。此外,终端可以使用它在同一目录下创建另一个终端,并在退出/重新启动终端时(启用 Resume 时)恢复工作目录。它还可以恢复窗口组的目录。
它与用于窗口和选项卡标题的操作系统命令 (OSC) 转义序列相同,但第一个参数设置为 7。该值应为“文件:”URL,它启用百分比编码特殊字符,以便它可以处理所有有效的路径名。您还应该包括主机名,以便终端可以确定它是否是本地目录;如果它来自不同的主机,终端将避免将其用作当前工作目录。
在相关说明中,终端同样支持使用参数为 6 的 OSC 转义序列设置“表示文件”。如果设置,代理图标将显示此而不是工作目录。例如,我有 emacs 和 less 配置来反映代理图标中当前显示的文件/缓冲区。这使得这些基于 tty 的程序能够与周围的操作系统更加集成。
默认情况下为 bash(Mac OS X 上的默认 shell)启用工作目录行为。有关相关代码,请参阅 /etc/bashrc。
值得一提的是,Lion Terminal 现在支持使用 OSC 转义序列独立于窗口标题设置选项卡标题。
归档时间: |
|
查看次数: |
43831 次 |
最近记录: |