Csh 스크립트의 SHELL이 /bin/sh를 가리키는 이유는 무엇입니까?

Csh 스크립트의 SHELL이 /bin/sh를 가리키는 이유는 무엇입니까?

예, C-shell이 ​​나쁘다는 것을 알고 있습니다. 아니요, C쉘을 선택하지 않았습니다. 예, 저는 적절한 케이스를 사용하는 것을 선호합니다. 아니요, 더 나은 쉘로 전환할 수 없습니다.

매우 간단한 스크립트가 있습니다.

/tmp/env_test.csh

#!/bin/csh -f

env

tcsh 쉘을 사용하여 로그인한 사용자로부터 이 스크립트를 실행하면 SHELL과 같습니다 /bin/tcsh. cron에서 이 스크립트를 실행하면 SHELL과 같습니다 /bin/sh.

SHELL이 제대로 업데이트되지 않는 이유는 무엇입니까? 이 문제를 해결하려면 어떻게 해야 합니까?

답변1

조사 man 1 csh. 이 섹션에는 Pre-defined and environment variables정의되거나 따르는 변수가 나열되어 있습니다 csh. 소문자 변수 가 있습니다 shell:

     shell      The file in which the shell resides.  This variable is used in
                forking shells to interpret files that have execute bits set,
                but which are not executable by the system.  (See the descrip-
                tion of Non-builtin Command Execution below.)  Initialized to
                the (system-dependent) home of the shell.

그럼 살펴보겠습니다:

% echo $shell
/bin/csh

답변2

crontrab에서 이 변수를 설정해야 하며 SHELL다음을 통해 cron 환경 변수를 확인할 수 있습니다./bin/csh

* * * * * env > ~/cron-env
tail -f ~/cron-env

기본값 SHELL은 으로 설정되어야 합니다 /bin/sh.

SO: cron이 스크립트를 실행하는 환경을 시뮬레이션하는 방법은 무엇입니까?

관련 정보