我在 Ubuntu Ubuntu 20.04.5 LTS 上使用 bash 终端和 GNOME 终端模拟器。使用终端时,这是当前(默认)行为:
- 当我打开一个新的终端会话时,它以
~
. - 例如,当我从目录打开新的终端选项卡时,
path/to/dir
新选项卡将从该目录开始path/to/dir
。
我想改变 1) 而不改变 2)。我想从 启动一个新的终端会话~/start
,但新选项卡仍应在当前目录中打开。我怎样才能实现这个目标?
这个问题的完美答案(添加cd /start
到.bashrc
)确实会改变 2) - 这样,/start
无论当前目录如何,新选项卡都会开始。
从同一答案的评论中,我认为“打开新选项卡”行为不是 bash 函数,但必须有一些额外的逻辑使“打开新选项卡”比“打开新终端”更多。我假设终端仿真器中发生了一些事情,确保了 2) 中指定的行为。但我什至不确定,也不知道如何改变它。
答案1
shell 和终端实际上没有“默认”启动目录。
他们拥有的是一个继承的目录。您启动的目录是父进程已经所在的目录。
我可以想到两种方法来实现您既定的目标:
~/start
添加在或中打开终端的快捷方式/start
。您可以创建一个start.desktop
文件或执行此操作的文件,并将其用作您的初始终端。- 如果你绝不如果你想从你的主目录开始,你可以在 bashrc 中添加一些东西来检测它,并且只有当它从主目录开始时才更改目录。 (但是,我认为从
cd
长远来看,向 .bashrc 添加命令可能是一个坏主意。) - 我认为使用 shell 别名快速更改目录的想法(来自引用的替代问题)是一个很好的想法。外壳设置也是如此
CDPATH
。
“在新选项卡中打开”功能要么是图形终端的功能,要么是您单击的图形应用程序的功能。一般来说,bash 不是一个图形应用程序,对任何鼠标或其他 GUI 交互或打开窗口等一无所知。如果在终端中打开一个新选项卡继承了前一个选项卡而不是父选项卡的起始目录,那么 shell 正在执行聪明的做法是从上一个选项卡中的 bash 中复制它。