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 -l
tcshで始まりログインシェルとして機能することです。それでも読み取ることはできませんが、他のファイルを読み込むことが/etc/profile
できます(CentOSに何が含まれているか、システム管理者がそれをカスタマイズする方法は/etc/csh.login
わかりません)。csh.login
読んだ後、/etc/csh.login
tcshはを読みます~/.login
。設定した方法によっては、~/.login
前、後、または代わりに来ることができます~/.tcshrc
。PATH
したがって~/.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.