首先介绍一下背景。我提前为术语的误用道歉。如有错误,请指正。
为了工作,我将通过 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
。
重命名
$HOME/software
(如果已经存在):mv $HOME/software $HOME/software.old
创建一个名为 的链接
$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
设置环境变量更安全。请参阅这里解释何时读取哪些文件。