如何在 $HOME 以外的目录中启动所有 shell 会话?

use*_*069 68 bash terminal environment-variables

当我在 Ubuntu 中打开我的非登录 shell 时,我当前的工作目录是/home/user_name(我的$HOME环境变量),但我想改变它,这样当我启动我的终端时我在其他目录中。

我读过当我在 Ubuntu 中启动我的终端时,会找到一个.bashrc文件。所以我加了

export HOME=/home/user_name/Documents 
Run Code Online (Sandbox Code Playgroud)

到我的.bashrc文件。现在,当我打开终端时,我仍在/home/user_name目录中。

我怎样才能改变这个?

ter*_*don 63

首先,从您的.bashrc. 这样做的方法不是通过玩$HOME,该变量将始终指向您的主目录,您不想更改它只是为了让您的外壳从不同的位置开始。

我相信会有更优雅的方法来做到这一点,但作为临时解决方法,您可以简单地将此行添加到您的.bashrc

cd ~/Documents 
Run Code Online (Sandbox Code Playgroud)

由于每次启动新的非登录 shell(打开一个新终端)时cd都会读取该文件,因此将执行该命令并且您的终端将~/Documents按照您的意愿启动。

  • @queueoverflow 通常?在什么操作系统中?在哪个分布?不适用于 Debian、SuSe 或 CentOS。事实上,我想我只在 Ubuntu 上见过。 (2认同)

Sté*_*las 26

终端将在它从其父级继承的工作目录中启动。

但是,有些允许通过配置设置覆盖它。

使用gnome-terminal,您可以编辑您的个人资料,勾选运行自定义命令而不是我的 shell并使其:

sh -c 'cd ~/Documents; exec "${SHELL:-sh}"'
Run Code Online (Sandbox Code Playgroud)


小智 5

这是我放在我的~/.bash_profile

alias curDir="pwd | sed -e 's/ /\\ /'"
alias save='echo `curDir` > ~/.saved_dir'
alias saved='cd `cat ~/.saved_dir`'
saved
Run Code Online (Sandbox Code Playgroud)

我一直依赖这个。基本上,当我在处理某个项目时,我会save为其创建一个主目录,然后每个后续会话都从那里开始。然后当我改变项目或其他什么的时候,我会去save别的地方。

我在寻找更好的方法时发现了这个问题,但我所拥有的比硬编码一个特定目录更可取。