csh 스크립트가 때때로 /etc/csh.cshrc의 소스 코드를 얻지 못하는 원인은 무엇입니까?

csh 스크립트가 때때로 /etc/csh.cshrc의 소스 코드를 얻지 못하는 원인은 무엇입니까?

%post인터프리터 라인을 #!/bin/csh(옵션 없이 )로 설정하여 rpm에서 실행되는 csh 설치 후 스크립트가 있습니다 -f. /etc/csh.cshrc두 가지 매뉴얼 페이지에 따르면 나머지 스크립트가 실행되기 전에 파일을 읽어야 합니다.bsd-csh(1)그리고tcsh(1). /etc/csh.cshrc스크립트가 제대로 작동하기 위해 의존하는 특정 시스템 전체 환경 변수와 별칭이 정의되어 있습니다 . 예상되는 동작은 csh가 스크립트를 실행할 때 먼저 시스템 전체 정의를 가져온 다음 스크립트가 성공적으로 실행되는 것입니다.

이것은 적어도 특정 조건에서는 작동합니다. csh 스크립트는 항상 %postrpm 섹션에서 동일한 방식으로 호출됩니다. 다만, 어플리케이션 rpm 설치를 어떻게 하느냐에 따라 스크립트가 예상한 변수를 가져오지 못하고 에러가 나올 수도 있어서 /etc/csh.cshrc전혀 소스가 나오지 않을 수도 있을 것 같습니다 . 설치는 sudo, ssh, cron을 통해 루트 로그인 셸에서 수행하거나 다른 프로세스에서 시작할 수 있습니다. 그 중 적어도 하나는 /etc/csh.cshrc차단 소스에 약간의 차이를 가져옵니다. -f매뉴얼 페이지에는 이 문제를 일으키는 옵션 외에는 아무 것도 표시되지 않습니다 .

답변1

$HOME차이점은 환경 변수가 누락된 것으로 나타났습니다 . 환경에 정의되어 있지 않으면 $HOMEcsh 또는 tcsh는 시작 파일을 전혀 가져오지 않습니다. csh는 누락된 변수를 $HOME주어진 명령줄 옵션과 정확히 동일하게 해석합니다.-f

이는 쉘 시작 파일 ~/.cshrc과 사용자 홈 디렉토리를 고려할 때 의미가 있습니다. 정의되지 않은 ~/.login경우 $HOME이러한 사용자별 파일을 로드할 수 없습니다. 그러나 $HOME정의되지 않은 경우 csh는 시스템 전체 시작 파일 및 사용자별 시작 파일을 포함하여 모든 시작 파일 검색을 건너뜁니다.

csh 스크립트를 실행하기 전에 $HOME사용자의 실제 홈 디렉토리이든 빈 임시 디렉토리이든 유효한 디렉토리를 정의하면 csh 소스 코드가 /etc/csh.cshrc예상대로 작동하게 됩니다.

이 기능을 설명하거나 설명하는 문서를 찾지 못했지만 bsd-csh 및 tcsh의 소스 코드는 이 동작을 확인합니다.

답변2

csh가 실제로 실행되고 있는지 확인하세요!

which cshcsh의 위치를 ​​얻으려면 실행하십시오 .

달리기ls -l /path/returned/by/which/csh

내 경우에는 csh어떻게 든 tcsh.

관련 정보