Ian*_*non 7 linux gnome bash bashrc gnome-terminal
如果我gnome-terminal
在路径包含符号链接的工作目录中使用,并且我打开一个新选项卡,则符号链接将扩展到新选项卡工作目录中的目标位置。
打开新标签页时,有没有办法保留符号链接?
正在Ubuntu Launchpad和GNOME Bugzilla上跟踪此错误。
由于这主要让我对几个目录感到烦恼,因此我使用以下更简单的解决方法。
假设你有/home/username/work
一个符号链接到/long/path/named/asdf
. 因此,您cd ~/work
在 gnome-terminal 中执行操作,打开一个新选项卡,然后找到报告完整路径的终端。要解决此问题,只需将以下内容放入您的.bashrc
:
cd ${PWD/\/long\/path\/named\/asdf/$HOME\/work}
Run Code Online (Sandbox Code Playgroud)
当 gnome-terminal 启动一个新的 shell 时,它会用 $PWD 获取当前目录,如果它包含/long/path/named/asdf
,它会将那个字符串替换为$HOME/work
, 和cd
s 到结果字符串。如果 $PWD 不包含字符串,则相当于cd $PWD
,它什么都不做。
小智 4
我怀疑对此没有真正好的答案。 gnome-terminal
通过检查找到bash
的当前工作目录/proc/<pid>/cwd
,其中符号链接已展开(可能是出于安全原因,如果没有其他原因)。我不知道一个进程找到另一个进程的工作目录的另一种方法。
作为解决方法,您可以尝试一些 bash 技巧,但请参阅下面的警告!在.bashrc中:
...
PROMPT_COMMAND='pwd >~/.bashlocal_saved_dir'
...
[ -n "$PS1" -a -f ~/.bashlocal_saved_dir ] && cd `cat ~/.bashlocal_saved_dir`
# end of .bashrc
Run Code Online (Sandbox Code Playgroud)
这会做两件事。首先,每次 bash 显示提示符时,它都会首先将当前工作目录写入.bashlocal_saved_dir
主目录中的文件中。其次,当 bash 以交互方式启动(而不是运行脚本)时,它将更改为存储在同一文件中的目录。这意味着当您启动新的交互式 bash 时,它将在与上次显示提示符的 bash 相同的目录中启动。请注意,您可以按 Enter 键使 bash 重新显示其提示符,从而使其成为最后一个提示符。:)
警告:这是一个 hack,我只尝试了它,直到我知道它有效。想想泡泡糖和小鞋带。它可能会产生令人惊讶的效果,并且肯定不会像 的gnome-terminal
方法那样干净利落。特别是,如果您同时运行多个选项卡,并且所有选项卡都在执行后台任务,那么在打开新选项卡时,您很可能会进入“错误”的目录。
归档时间: |
|
查看次数: |
1255 次 |
最近记录: |