まず、背景について少し説明します。用語の誤用を事前におaび申し上げます。必要に応じて修正してください。
私の仕事では、いくつかのubuntuマシンでssh経由でリモートでシミュレーションを実行します。これらのマシンはネットワーク内にあり、私のアカウントはそれらすべてにリンクされています。 $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に追加することで、ホームディレクトリをスクラッチに再割り当てすると思います。私は正しいですか?これは危険ですか?長時間のシミュレーションを実行する以外は、これらのマシンを実際に使用することはありません。
ps:最終的な解決策は、IT担当者に調査を依頼することです。可能であれば、簡単な修正を行います。
いいえ、rcファイルを別の場所にコピーしても何も問題はありません。そうは言っても、$HOME
を起動時に読み込まれるファイルの1つ(たとえば[HOME=/foo
])に追加することで、実際に~/.profile
を変更できますが、これは本当に良い考えではありません。 HOME
は、スクリプトだけでなく、さまざまなもので使用され、意図しない結果を招く可能性があるため、変更する理由はありません。
たとえば、シェルを含むさまざまなプログラムのデフォルトの構成ファイルは、$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
で行われます。
最後に、シェルにはさまざまなタイプがあることに注意してください。 ssh
を介してログインすると、対話型ログインシェルが実行され、多くのシステムで$HOME/.bashrc
はこれらのシェルによって無視されます。 Ubuntuは特に$HOME/.bashrc
も読み取りますが、そのようなシェルについては他の多くのディストリビューションは読みません。したがって、$HOME/.profile
ではなく$HOME/.bashrc
を使用して環境変数を設定する方が安全です。どのファイルがいつ読み取られるかの説明については、 here を参照してください。