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
. 스크립트에 이를 유발하는 무언가가 있어야 합니다. 한 가지 가능한 가능성(유일한 가능성은 아님)은 스크립트가 #!/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.