【问题标题】:How can I get the terminal opened in the same working directory it was closed in?如何让终端在它关闭的同一工作目录中打开?
【发布时间】:2019-10-26 09:54:37
【问题描述】:

我希望 bash 终端在它关闭的同一目录中打开。如果有多个终端运行并被关闭。新打开的终端将从最后一个关闭的工作目录开始。我的猜测是我会在关闭后以某种方式保存 PWD,然后在 .bashrc 脚本中检索它。但我不知道如何在终端关闭时自动保存密码。

【问题讨论】:

  • 这不会扩展;仅当您承诺从不打开多个终端时,它才有用。 Mac Bash 配置有一个会话保存功能,可以扩展到多个终端窗口,但它很重要,IIRC 依赖于 Mac 桌面平台的支持。
  • 我通常只需要一个终端,我主要使用它与 git 一起工作,每次打开计算机时将终端导航到我的项目很烦人。
  • 为了扩展它,可以实现某种堆栈,每次终端关闭时都会推送到工作目录的路径,每次新终端打开时都会弹出。

标签: bash shell terminal


【解决方案1】:

这里有一个解决方案:

在您的~/.bash_logout 末尾添加以下行:

echo "BASH_LAST_DIR=$PWD" > ~/.bash_lastdir

在您的~/.bash_profile 末尾添加以下行:

if [[ -f ~/.bash_lastdir ]]; then
    source ~/.bash_lastdir
    cd $BASH_LAST_DIR
fi

这样就可以了。

最后,为了方便使用,这里有一个copy & paste 命令可以自动为你设置:

cat << EOF >> ~/.bash_logout
echo "BASH_LAST_DIR=\$PWD" > ~/.bash_lastdir
EOF
cat << EOF >> ~/.bash_profile
if [[ -f ~/.bash_lastdir ]]; then
    source ~/.bash_lastdir
    cd \$BASH_LAST_DIR
fi
EOF

只需在终端上复制并粘贴即可。

【讨论】:

  • 感谢您的解决方案,如果我通过运行exit 命令关闭终端,但当我单击右上角的十字按钮时,则无法正常工作。任何想法如何解决这个问题?我正在为 windows 使用 linux 子系统,所以它在这里可能会有所不同。
  • 很遗憾没有。没有简单的方法来处理这种情况。
  • 谢谢,我是这么认为的。我做了一些解决方法,并通过运行echo '"\e":"exit\n"' &gt;&gt; ~/.inputrc 将退出绑定到我的转义键,这对我来说很好:)
  • 自动发出“cd -”怎么样?
【解决方案2】:

你可以把它添加到你的 .bashrc 中

cd $LAST_WORKING_DIRECTORY

其中 last_working_directory 是您可以在 .bashrc 中保存为新环境变量的最后一个工作目录 关闭终端时必须修改此变量

export LAST_WORKING_DIRECTORY="$pwd"

【讨论】:

  • 这可能不起作用,因为当 bash 会话结束时环境被破坏(并且变量的内容丢失)。例如,您需要将其保存在主目录中某处的文件中。 .bash_logout 是您可以实现类似功能的文件。
  • 我建议在 .bashrc 中保存一个环境变量,命名为 $LAST_WORKING_DIRECTORY,就像 $PATH 一样。每次 bash shell 会话结束时都会更新此变量
  • 但即使是设置环境变量的语法也不对。您需要编辑您的答案并说出正确的话才能将其作为解决方案。
  • 我将答案编辑为正确答案。感谢您关注 accdias
  • 我认为export 在这里没有必要或有用。 export 的目的是将变量公开给子进程,但显然您不想运行任何实际使用此变量的子进程。
猜你喜欢
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 2022-11-02
相关资源
最近更新 更多