重新启动时如何使Mac Terminal还原工作目录


16

我在Mac Terminal上使用了满满的选项卡,每个选项卡都分配给不同的工作目录。我已将其配置为使用相同的工作目录打开新窗口。但是,当我退出Terminal并重新启动时,它会重建所有选项卡,它们的名称,甚至显示窗口中的最后一个输出,但会保留在用户主目录中,并且不会还原每个选项卡的最新工作目录。

我究竟做错了什么?这可能是由的某些设置引起的~/.bash_profile吗?


我认为您可以在此线程中找到所需的内容。apple.stackexchange.com/questions/863/...
dhempler

1
因此,我以为应该立即使用它是错误的吗?
奥利弗·德罗博姆

Answers:


15

(作为参考,我们正在谈论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

1
感谢您的答复,但我似乎无法正常工作。我已经删除了我的.bashrc(尽管我无法发现任何快速的命令自定义。现在,我执行以下操作:1.打开一个新的Terminal窗口(在用户的主目录中打开)2. cd文档3.退出Terminal 4.打开Terminal 5 。窗口重新打开,显示目录更改输出,但仍位于用户的主目录中
Oliver Drotbohm 2012年

@OliverGierke终端创建登录shell,所以还要检查~/.bash_profile~/.bash_login~/.profile
克里斯·佩奇

我没有后两者,前者现在~/.bashrc按照您的建议执行。
奥利弗·德罗博姆

2
我明白了,克里斯。我的/etc/bashrc似乎已被安装脚本或任何其他东西调整了。有一个/etc/bashrc.orig包含一些其他配置(我认为是原始设置)的gist.github.com/3273170。重新添加到/etc/bashrc使事情再次按预期工作。非常感谢您的帮助和耐心!
奥利弗·德罗博姆

我没有在.bashrc中更改$ PROMPT_COMMAND,而我只有系统默认的/ etc / bashrc。还有其他建议吗?
理查德

3

如果使用的是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


1

在找到答案之前,我写了一篇有关如何为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,仅以转义空间为代价。如果您需要转义其他特殊字符,则必须付出更多的努力才能找到更全面的解决方案。

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.