%post
인터프리터 라인을 #!/bin/csh
(옵션 없이 )로 설정하여 rpm에서 실행되는 csh 설치 후 스크립트가 있습니다 -f
. /etc/csh.cshrc
두 가지 매뉴얼 페이지에 따르면 나머지 스크립트가 실행되기 전에 파일을 읽어야 합니다.bsd-csh(1)그리고tcsh(1). /etc/csh.cshrc
스크립트가 제대로 작동하기 위해 의존하는 특정 시스템 전체 환경 변수와 별칭이 정의되어 있습니다 . 예상되는 동작은 csh가 스크립트를 실행할 때 먼저 시스템 전체 정의를 가져온 다음 스크립트가 성공적으로 실행되는 것입니다.
이것은 적어도 특정 조건에서는 작동합니다. csh 스크립트는 항상 %post
rpm 섹션에서 동일한 방식으로 호출됩니다. 다만, 어플리케이션 rpm 설치를 어떻게 하느냐에 따라 스크립트가 예상한 변수를 가져오지 못하고 에러가 나올 수도 있어서 /etc/csh.cshrc
전혀 소스가 나오지 않을 수도 있을 것 같습니다 . 설치는 sudo, ssh, cron을 통해 루트 로그인 셸에서 수행하거나 다른 프로세스에서 시작할 수 있습니다. 그 중 적어도 하나는 /etc/csh.cshrc
차단 소스에 약간의 차이를 가져옵니다. -f
매뉴얼 페이지에는 이 문제를 일으키는 옵션 외에는 아무 것도 표시되지 않습니다 .
답변1
$HOME
차이점은 환경 변수가 누락된 것으로 나타났습니다 . 환경에 정의되어 있지 않으면 $HOME
csh 또는 tcsh는 시작 파일을 전혀 가져오지 않습니다. csh는 누락된 변수를 $HOME
주어진 명령줄 옵션과 정확히 동일하게 해석합니다.-f
이는 쉘 시작 파일 ~/.cshrc
과 사용자 홈 디렉토리를 고려할 때 의미가 있습니다. 정의되지 않은 ~/.login
경우 $HOME
이러한 사용자별 파일을 로드할 수 없습니다. 그러나 $HOME
정의되지 않은 경우 csh는 시스템 전체 시작 파일 및 사용자별 시작 파일을 포함하여 모든 시작 파일 검색을 건너뜁니다.
csh 스크립트를 실행하기 전에 $HOME
사용자의 실제 홈 디렉토리이든 빈 임시 디렉토리이든 유효한 디렉토리를 정의하면 csh 소스 코드가 /etc/csh.cshrc
예상대로 작동하게 됩니다.
이 기능을 설명하거나 설명하는 문서를 찾지 못했지만 bsd-csh 및 tcsh의 소스 코드는 이 동작을 확인합니다.
답변2
csh가 실제로 실행되고 있는지 확인하세요!
which csh
csh의 위치를 얻으려면 실행하십시오 .
달리기ls -l /path/returned/by/which/csh
내 경우에는 csh
어떻게 든 tcsh
.