更改 .bashrc 中 $HOME 的值

更改 .bashrc 中 $HOME 的值

首先介绍一下背景。我提前为术语的误用道歉。如有错误,请指正。

为了工作,我将通过 ssh 在几台 ubuntu 机器上远程运行模拟。这些机器位于网络中,我的帐户与所有机器相关联,即,在每台机器上$HOME都是/home/links/Ogaday镜像。因此,我在一台机器上的该文件夹中创建一个目录,该目录出现在另一台机器上(在这种情况下,我不知道如何使用正确的术语)。每台机器上还有本地内存,该机器上的每个用户都可以访问,称为/scratch/。我将创建一个目录来/scratch/完成我的实际工作,因为我认为我的帐户中没有足够的内存来在 $HOME 中运行模拟,而且我认为由于都是本地的,所以速度会更快。

现在,这些机器上安装了我需要使用的软件,并且它安装在我没有写权限的目录中(/usr/local/software/)。但是,该软件有一个设置环境变量的 bash 脚本。我应该将 bash 脚本(source /usr/local/software/etc/bashrc)附加到 以$HOME/.bashrc设置必要的环境变量。到目前为止都很标准,这会为该软件在我登录时运行设置好一切,对吗?现在,我认为这些计算机上的软件配置不正确,因为 应该.../etc/bashrc设置一个名为 的变量$SOFTWARE_INST_DIR,即安装目录。默认情况下,这是$HOME/software,因此需要更改该 bashrc 文件以便将其设置为/usr/local/software。当然,我没有 的写权限.../etc/bashrc。还有其他类似的问题,这只是首先失败的事情。

作为修复,我将该文件复制到$HOME/software-etc/bashrc并附加到source $HOME/software-etc/bashrc$HOME/.bashrc不是附加source /usr/local/software/etc/bashrc,以便我可以编辑它分配的变量。这有什么根本性的错误吗?我认为另一个解决方案是,不是从软件安装位置复制 bashrc 文件,而是附加export $HOME=/scratch/ogaday到 .bashrc,我认为这会将我的主目录重新分配为临时目录。我说得对吗?这危险吗?除了在它们上运行长时间的模拟之外,我不会真正使用这些机器做任何其他事情。

附言:我想,最终的解决方案是请 IT 人员来调查一下!如果可能的话,我宁愿快速修复。

答案1

不,将 rc 文件复制到其他地方没有错。话虽如此,虽然您确实可以$HOME通过HOME=/foo向启动时读取的文件之一添加内容(~/.profile例如)来更改您的,但这确实不是一个好主意。HOME被许多东西使用,而不仅仅是您的脚本,没有理由更改它,因为这可能会产生意想不到的后果。

例如,各种程序(包括您的 shell)的默认配置文件都存储在 中$HOME。如果您更改它,您的设置将会丢失。

现在,如果我理解正确的话,你的主要目标是指向$HOME/software/usr/local/software最简单的解决方案是创建$HOME/software一个指向 的链接,而不是复制文件/usr/local/software

  1. 重命名$HOME/software(如果已经存在):

    mv $HOME/software $HOME/software.old
    
  2. 创建一个名为 的链接$HOME/software,指向/usr/local/software

    ln -s /usr/local/software $HOME/software
    

现在,任何寻找的事情$HOME/software都将会找到/usr/local/software

类似地,为了在每台机器上本地完成工作,请创建目录/scratch,然后将其链接到您的$HOME

mkdir /scratch/ogaday
ln -s /scratch/ogaday $HOME/work

现在,您在 中所做的一切$HOME/work实际上都会在 中发生/scratch/ogaday

最后,请记住,shell 有多种类型。当您通过 登录时ssh,您正在运行一个交互式登录 shell,并且在许多系统上,$HOME/.bashrc这些 shell 会忽略它。虽然 Ubuntu 也明确地读取$HOME/.bashrc,但对于此类 shell,许多其他发行版却没有。因此,使用$HOME/.profile而不是$HOME/.bashrc设置环境变量更安全。请参阅这里解释何时读取哪些文件。

相关内容