我在Mac Terminal上使用了满满的选项卡,每个选项卡都分配给不同的工作目录。我已将其配置为使用相同的工作目录打开新窗口。但是,当我退出Terminal并重新启动时,它会重建所有选项卡,它们的名称,甚至显示窗口中的最后一个输出,但会保留在用户主目录中,并且不会还原每个选项卡的最新工作目录。
我究竟做错了什么?这可能是由的某些设置引起的~/.bash_profile
吗?
我在Mac Terminal上使用了满满的选项卡,每个选项卡都分配给不同的工作目录。我已将其配置为使用相同的工作目录打开新窗口。但是,当我退出Terminal并重新启动时,它会重建所有选项卡,它们的名称,甚至显示窗口中的最后一个输出,但会保留在用户主目录中,并且不会还原每个选项卡的最新工作目录。
我究竟做错了什么?这可能是由的某些设置引起的~/.bash_profile
吗?
Answers:
(作为参考,我们正在谈论Mac OS X Lion 10.7和更高版本的“继续”功能。)
如果您使用默认的shell bash,终端将自动还原工作目录。如果您使用其他外壳程序,则需要调整代码/etc/bashrc
以发送转义序列以将工作目录传达给Terminal,以便稍后可以恢复该目录以供Resume使用。如果您使用的是zsh,请参阅我对Resume Zsh-Terminal(OS X Lion)的回答,其中包括适用于zsh的代码。
如果您有一个自定义,~/.bash_profile
或者~/.bashrc
您可能需要确保您不通过修改/etc/bashrc
的自定义来撤消默认行为。特别是,它将PROMPT_COMMAND
环境变量设置为在每个提示符下发送转义序列。如果自定义该变量,则需要在代码前添加前缀或将其附加到当前值,例如:
PROMPT_COMMAND="<your code here>;$PROMPT_COMMAND"
另外,通常~/.bash_profile
应执行~/.bashrc
:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
.bashrc
(尽管我无法发现任何快速的命令自定义。现在,我执行以下操作:1.打开一个新的Terminal窗口(在用户的主目录中打开)2. cd文档3.退出Terminal 4.打开Terminal 5 。窗口重新打开,显示目录更改输出,但仍位于用户的主目录中
~/.bash_profile
,~/.bash_login
和~/.profile
。
~/.bashrc
按照您的建议执行。
/etc/bashrc
似乎已被安装脚本或任何其他东西调整了。有一个/etc/bashrc.orig
包含一些其他配置(我认为是原始设置)的gist.github.com/3273170。重新添加到/etc/bashrc
使事情再次按预期工作。非常感谢您的帮助和耐心!
如果使用的是Bash-It,则可能会遇到被Bash-It $PROMPT_COMMAND
覆盖的问题。
如前所述,OS X使用它在新选项卡中还原cwd。打击它应该附加值,而不是覆盖它们。
但是目前的解决方法是将以下行添加到您的 ~/.bash_profile
source $BASH_IT/bash_it.sh
export PROMPT_COMMAND="$PROMPT_COMMAND;update_terminal_cwd;"
有关更多信息,请查看问题跟踪器以获取更新:https : //github.com/revans/bash-it/issues/240
以及Apple参考资料 https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/sh.1.html
在找到答案之前,我写了一篇有关如何为csh / tcsh进行此操作的博客文章。如果有人来这里寻找这些外壳的解决方案,这里是:
if ("$?TERM_PROGRAM") then
if ("$TERM_PROGRAM" == "Apple_Terminal") then
alias precmd 'printf "\033]7;%s\a" "file://$host$cwd:ags/ /%20/"'
endif
endif
将其添加到您的.cshrc
或.tcshrc
适当的地方。(与ssh一样,外部if语句对于避免远程登录时出错是必需的。由于tcsh中的变量扩展规则,它必须是单独的语句。)
就像Apple内置的bash支持一样,此解决方案除之外不使用任何外部程序printf
,仅以转义空间为代价。如果您需要转义其他特殊字符,则必须付出更多的努力才能找到更全面的解决方案。