グローバル /etc/profile setenv またはエクスポートは .profile のユーザー設定をオーバーライドします。

グローバル /etc/profile setenv またはエクスポートは .profile のユーザー設定をオーバーライドします。

CentOS 5.3クラスタの/home/user_name/bin(以前の)バージョンではなく、変更されたバージョンのプログラムを呼び出す必要があります。/opt/program_name/currentこのプログラムはPythonを使用してtcshスクリプトを作成し、スクリプトを実行します。

問題のプログラムの修正バージョンを呼び出すようにPATHをオーバーライドして、nへのパスを識別できます~/bin。 、、、、でこれを行いました。ただし、tcshが実行されるたびに環境変数がロードされ、パスがに復元されます。which program_name~/bi.bashrc.profile.tcshrc.cshrc/etc/profile/opt/program_name/current

/etc/profile.d/program_name.shこれらのプログラム固有の変数は呼び出し時に設定されます/etc/profile

# /etc/profile 
for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        . $i
    fi
done
unset i

したがって、program_name.sh呼び出し時のスクリプトは次のようになります。

# /etc/profile.d/program_name.sh
setenv PATH ${PATH}:/opt/program_name/current

/etc/profile自分のユーザーアカウントへのアクセスを防ぐにはどうすればよいですか?

私はsuにアクセスできず、他のユーザーはまだ以前のバージョンのソフトウェアを使用しているため、/opt/program_name/currentソフトウェアを更新したり設定を変更したりすることはできません。/etc/profile.d/program_name.sh

答え1

tcshは自動的に読み込まれません/etc/profile。スクリプトにこれを引き起こすものが必要です。 1つの可能性(唯一の可能性ではない)は、スクリプトが#!/bin/tcsh -ltcshで始まりログインシェルとして機能することです。それでも読み取ることはできませんが、他のファイルを読み込むことが/etc/profileできます(CentOSに何が含まれているか、システム管理者がそれをカスタマイズする方法は/etc/csh.loginわかりません)。csh.login

読んだ後、/etc/csh.logintcshはを読みます~/.login。設定した方法によっては、~/.login前、後、または代わりに来ることができます~/.tcshrcPATHしたがって~/.tcshrc

それでも問題が解決しない場合は、Pythonスクリプトを修正するのが最善の選択肢かもしれません。コードがモジュールにある場合は、PYTHONPATH元のコードをロードしていくつかの変更するラッパーモジュールを挿入して問題を解決できます。

これが失敗した場合、プログラム実行可能ファイルまたはtcshへのアクセスを「リダイレクト」する簡単な方法はありません。原則としてLD_PRELOAD

.cshrcそのスクリプトを見なければ、より正確に話すのは難しいです。

答え2

最良の選択は次のとおりです。依存しないPATH代わりにフルパスが提供されますprogram_name

/ etc / profileを取得する理由は、またはによって/etc/csh.chsrc呼び出される必要があります/etc/csh.login。詳しくはmanページをご覧くださいtcsh。具体的には、次のような部分を探してみてください(検索)。Startup and shutdownそしてFILESマンページから。

~から開始と終了、これが最も関連性の高い部分です。

ログインシェルはまずシステムファイルおよび /etc/csh.cshrc / /etc/csh.loginからコマンドを実行します。次に、ユーザーのホームディレクトリにあるファイルからコマンドを実行します。

...

非ログインシェルは読み取り専用または/etc/csh.cshrc開始時に読み取ります~/.tcshrc~/.cshrc

そしてから文書(すべての *nix バージョンを含む):

   /etc/csh.cshrc  Read first by every shell.  ConvexOS, Stellix and Intel
                   use /etc/cshrc and  NeXTs  use  /etc/cshrc.std.   A/UX,
                   AMIX,  Cray  and IRIX have no equivalent in csh(1), but
                   read this file in tcsh anyway.  Solaris  2.x  does  not
                   have it either, but tcsh reads /etc/.cshrc.  (+)
   /etc/csh.login  Read  by  login shells after /etc/csh.cshrc.  ConvexOS,
                   Stellix   and   Intel   use   /etc/login,   NeXTs   use
                   /etc/login.std,  Solaris 2.x uses /etc/.login and A/UX,
                   AMIX, Cray and IRIX use /etc/cshrc.

関連情報