web-dev-qa-db-ja.com

.bashrcの$ HOMEの値を変更する

まず、背景について少し説明します。用語の誤用を事前にお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/.bashrcsource /usr/local/software/etc/bashrcに追加して、割り当てた変数を編集できるようにしました。これに根本的な問題はありますか?別の解決策は、ソフトウェアのインストール場所からbashrcファイルをコピーする代わりに、export $HOME=/scratch/ogadayを.bashrcに追加することで、ホームディレクトリをスクラッチに再割り当てすると思います。私は正しいですか?これは危険ですか?長時間のシミュレーションを実行する以外は、これらのマシンを実際に使用することはありません。

ps:最終的な解決策は、IT担当者に調査を依頼することです。可能であれば、簡単な修正を行います。

3
Ogaday

いいえ、rcファイルを別の場所にコピーしても何も問題はありません。そうは言っても、$HOMEを起動時に読み込まれるファイルの1つ(たとえば[HOME=/foo])に追加することで、実際に~/.profileを変更できますが、これは本当に良い考えではありません。 HOMEは、スクリプトだけでなく、さまざまなもので使用され、意図しない結果を招く可能性があるため、変更する理由はありません。

たとえば、シェルを含むさまざまなプログラムのデフォルトの構成ファイルは、$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で行われます。

最後に、シェルにはさまざまなタイプがあることに注意してください。 sshを介してログインすると、対話型ログインシェルが実行され、多くのシステムで$HOME/.bashrcはこれらのシェルによって無視されます。 Ubuntuは特に$HOME/.bashrcも読み取りますが、そのようなシェルについては他の多くのディストリビューションは読みません。したがって、$HOME/.profileではなく$HOME/.bashrcを使用して環境変数を設定する方が安全です。どのファイルがいつ読み取られるかの説明については、 here を参照してください。

4
terdon