Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在关闭终端时所在的工作目录中打开终端?_Bash_Shell_Terminal - Fatal编程技术网

Bash 如何在关闭终端时所在的工作目录中打开终端?

Bash 如何在关闭终端时所在的工作目录中打开终端?,bash,shell,terminal,Bash,Shell,Terminal,我希望bash终端在关闭时所在的目录中打开。在多个终端运行和关闭的情况下。新打开的终端将从上次关闭的工作目录开始。我猜我会在关闭后保存PWD,然后在.bashrc脚本中检索它。但我不知道如何在终端关闭时自动保存PWD。您可以将其添加到.bashrc中 cd $LAST_WORKING_DIRECTORY 其中last_working_directory是最后一个可以保存为.bashrc中新环境变量的工作目录 关闭终端时必须修改此变量 export LAST_WORKING_DIRECTORY=

我希望bash终端在关闭时所在的目录中打开。在多个终端运行和关闭的情况下。新打开的终端将从上次关闭的工作目录开始。我猜我会在关闭后保存PWD,然后在.bashrc脚本中检索它。但我不知道如何在终端关闭时自动保存PWD。

您可以将其添加到.bashrc中

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键,这对我来说很好:)