전역 /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. 스크립트에 이를 유발하는 무언가가 있어야 합니다. 한 가지 가능한 가능성(유일한 가능성은 아님)은 스크립트가 #!/bin/tcsh -ltcsh로 시작하여 로그인 쉘로 작동한다는 것입니다. 그래도 읽을 수는 없지만 다른 파일을 읽을 수 /etc/profile있는 읽을 수 있습니다 (CentOS에 무엇이 포함되어 있는지 또는 시스템 관리자가 이를 사용자 정의할 수 있는 방법은 /etc/csh.login모르겠습니다 ).csh.login

읽은 후 /etc/csh.logintcsh는 을 읽습니다 ~/.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.

관련 정보