当您在bash中执行“退出”时,是否可以保存最后一个工作目录。因此,下次登录时,它将位于您上次注销时所在的目录。
答案 0 :(得分:17)
将〜./。bash_logout中的最后一个工作目录保存到隐藏文件中:
pwd > ~/.lastdirectory
使用
在〜/ .bashrc中读取此文件[ -s ~/.lastdirectory ] && cd `cat ~/.lastdirectory`
答案 1 :(得分:8)
把它放在~/.bashrc
(可能在最后):
cd "$(<~/.storepwd)"
然后您可以选择以下内容:
将其放在~/.bash_logout
中(不记得交互式非登录shell的目录):
printf %s "$PWD" > ~/.storepwd
或者在trap
上使用EXIT
,将其放在~/.bashrc
中(陷阱可以轻易/意外地覆盖):
trap 'printf %s "$PWD" > ~/.storepwd' EXIT
或者使用PROMPT_COMMAND
,将其设为~/.bashrc
(可能是最可靠的方式):
PROMPT_COMMAND+='; printf %s "$PWD" > ~/.storepwd'
另外,请确保您的~/.profile
或~/.bash_profile
来源~/.bashrc
,否则在登录shell开始时路径将无法恢复。
有关如何使用点文件的信息,请参阅 http://mywiki.wooledge.org/DotFiles。
答案 2 :(得分:2)
您还需要小心这整个概念。例如,如果您设法在不期望的情况下运行代码,则可能会混淆任何数量的内容。
例如,如果您要运行一个更改当前工作目录的shell脚本,然后在退出期间设法保存其CWD,您可能会在启动的下一个shell中以一个目录结束不要指望。
另一个流行的,至少对我来说是$ work,就是当一个脚本运行时,你的用户运行一个脚本,所有这些都是自动的(即以编程方式)。如果您正在为自己的用户执行此CWD技巧,那很好,但它可能主要搞砸了系统工具,期望“su - youruser -c ls”返回主目录中的文件。 (好吧,将“ls”称为你的用户是一个愚蠢的想法,但有些事情你的用户可能有比root更好的运行环境 - 例如,在已经压缩根的NFS挂载上。)
所以,这里的关键是判断你是否在交互式shell中,如果没有,不会恢复或保存你的CWD 。 IIRC,$ - 有一个'i'用于互动外壳。用它来设置陷阱和恢复CWD。 p>
就个人而言,我只是设置了一个别名:
alias go='. go.sh'
然后go.sh只是检查我想要去哪个目录的参数。例如,“go myproj”将cd~ / svn / myproj,“go bigdisk”将cd / mnt / bigdisk。并且,对于更复杂的情况,它可能需要更多参数,例如,“go myproj lib”只是“cd~ / svn / myproj / myproj / lib”或者其他什么。没有自动保存,但也没有副作用。
答案 3 :(得分:1)
每次更改dir(cd)时,都可以将当前目录(pwd)写入某个文件。启动终端时,bash启动脚本应该查看该文件为“last dir”。如果发现了什么 - cd到它。
答案 4 :(得分:0)
查看.bashrc,也许能够在注销时修改它以包含您感兴趣的目录。
答案 5 :(得分:0)
当shell退出时,您很可能希望将当前目录保存到文件中。有很多方法可以检测shell的输出:
您可以在每次提示时保存CWD,或者每次运行'cd'时保存CWD,但这有点矫枉过正。
要在下一个shell启动时恢复CWD,只需在保存文件的内容上运行“cd”即可。
您可能想要考虑如果同时运行多个shell会发生什么。你想保存哪一个CWD?是否应该开始使用CWD的所有新shell?或者只是下一个启动的shell?