Bash 如何在关闭终端时所在的工作目录中打开终端?
我希望bash终端在关闭时所在的目录中打开。在多个终端运行和关闭的情况下。新打开的终端将从上次关闭的工作目录开始。我猜我会在关闭后保存PWD,然后在.bashrc脚本中检索它。但我不知道如何在终端关闭时自动保存PWD。您可以将其添加到.bashrc中Bash 如何在关闭终端时所在的工作目录中打开终端?,bash,shell,terminal,Bash,Shell,Terminal,我希望bash终端在关闭时所在的目录中打开。在多个终端运行和关闭的情况下。新打开的终端将从上次关闭的工作目录开始。我猜我会在关闭后保存PWD,然后在.bashrc脚本中检索它。但我不知道如何在终端关闭时自动保存PWD。您可以将其添加到.bashrc中 cd $LAST_WORKING_DIRECTORY 其中last_working_directory是最后一个可以保存为.bashrc中新环境变量的工作目录 关闭终端时必须修改此变量 export LAST_WORKING_DIRECTORY=
cd $LAST_WORKING_DIRECTORY
其中last_working_directory是最后一个可以保存为.bashrc中新环境变量的工作目录
关闭终端时必须修改此变量
export LAST_WORKING_DIRECTORY="$pwd"
以下是一个解决方案:
在您的~/.bash\u注销中
在末尾添加以下行:
echo "BASH_LAST_DIR=$PWD" > ~/.bash_lastdir
if [[ -f ~/.bash_lastdir ]]; then
source ~/.bash_lastdir
cd $BASH_LAST_DIR
fi
在~/.bash\u配置文件中
最后添加以下行:
echo "BASH_LAST_DIR=$PWD" > ~/.bash_lastdir
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
cat>~/.bash\u注销
echo“BASH\u LAST\u DIR=\$PWD”>~/.BASH\u lastdir
EOF
cat>~/.bash\u配置文件
如果[-f~/.bash_lastdir]];然后
source~/.bash\u lastdir
cd\$BASH\u LAST\u DIR
fi
EOF
只要复制并粘贴到终端上就可以了。这可能不起作用,因为bash会话完成后环境会被破坏(变量的内容也会丢失)。例如,您需要将其保存在主目录中的某个文件中
.bash\u logout
是一个可以实现类似功能的文件。我建议在.bashrc中保存一个名为$LAST\u WORKING\u目录的环境变量,就像$PATH一样。每次bashshell会话结束时都会更新此变量,但即使设置环境变量的语法也不正确。您需要编辑您的答案,并说出正确的答案,以将其作为解决方案。我已将我的答案编辑为正确答案。感谢您注意到Accdias,我认为在这里,export
不是必需的,也不是有用的。export
的目的是将变量公开给子流程,但很明显,您不希望运行任何实际使用此变量的子流程;仅当您承诺从不打开多个终端时,此选项才有用。Mac Bash配置有一个会话保存功能,可扩展到多个终端窗口,但这并不重要,IIRC依赖于Mac桌面平台的支持。我通常不需要多个终端,我主要使用它与git一起工作,每次打开计算机时都将终端导航到我的项目,这很烦人。要扩展它,可以实现某种堆栈,每次终端关闭时都会推送到工作目录的路径,每次打开新终端时都会弹出。感谢您的解决方案,如果我通过运行exit
命令关闭终端,但当我单击右上角的十字按钮时,该命令不起作用。有没有办法解决这个问题?。我使用的是windows linux子系统,所以在这里可能会有不同的工作方式。不幸的是,没有。没有简单的方法来处理这种情况。谢谢,我想是的。。我做了一些变通,通过运行echo'''\e:“exit\n'>>~/.inputrc
将exit绑定到我的escape键,这对我来说很好:)