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


53

当我在Ubuntu中打开非登录外壳程序时,我当前的工作目录是/home/user_name(我的$HOME环境变量),但是我想更改此目录,以便在启动终端时位于其他目录中。

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

export HOME=/home/user_name/Documents 

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

我该如何更改?



3
不这样做也可能值得考虑。UNIX的设计并没有被您的祖先遗忘。
肖恩D

Answers:


52

首先,从中删除该行.bashrc。执行此操作的方法不是通过使用$HOME,该变量始终指向您的主目录,并且您不想更改它,只是为了使您的shell从其他位置开始。

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

cd ~/Documents 

由于每次启动新的非登录外壳程序(打开新终端)时cd都会读取该文件,因此将执行命令,并且终端将根据需要启动~/Documents


请注意,这将影响所有非登录交互式外壳程序(如果从bash_profile中获取bashrc,则将登录所有外壳程序) sshd启动的非交互式外壳程序。
斯特凡Chazelas

@StéphaneChazelas您确定吗?通常,[[ -z "$PS1" ]] && exit.bashrc非交互式会话的顶部有一个警卫,可以防止这种情况发生。
Martin Ueding 2014年

2
@queueoverflow通常?在什么操作系统上?在哪分配?不在Debian,SuSe或CentOS上。实际上,我想我只在Ubuntu上见过。
terdon

@terdon我已经在Ubuntu上看到它,并认为那是一般情况。
马丁·乌丁2014年

20

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

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

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

sh -c 'cd ~/Documents; exec "${SHELL:-sh}"'

1

这是我输入的内容~/.bash_profile

alias curDir="pwd | sed -e 's/ /\\ /'"
alias save='echo `curDir` > ~/.saved_dir'
alias saved='cd `cat ~/.saved_dir`'
saved

而且我一直都依赖它 基本上,当我处理某个项目时,我将save为其指定一个主目录,然后每个后续会话均从该目录开始。然后,当我更改项目或任何其他内容时,我会在save其他地方。

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


这在git bash中也很好用。只要记住重新启动bash shell或更改文件后使用(我认为)“ source〜/ .bash_profile”即可。
蒂姆

0

对于那些正在查看.bashrc文件位置的用户,通常它是主目录中的隐藏文件。

找到它:

打开您的终端并转到主目录,然后:

ls -al

显示所有隐藏文件。现在,您将可以看到您的.bashrc文件。

为了更改默认目录

  1. .bashrc输入以下命令在文本编辑器中打开文件:

    gedit .bashrc
  2. 最后添加命令来编辑此文件,例如:

    cd ~/YourDirectoryName
  3. 保存文件并重新启动终端。


问题不问如何编辑.bashrc,他已经完成了。您的答案只是两年前@terdon答案的重复。
Davor Cubranic
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.