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

예, C-shell이 나쁘다는 것을 압니다. 아니요, C-shell을 선택하지 않았습니다. 예, 적절한 셸을 사용하고 싶습니다. 아니요, 더 나은 셸로 전환 할 수 없습니다.

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

/tmp/env_test.csh

#!/bin/csh -f env 

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

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

댓글

  • 그래도 문제가되는 이유는 무엇입니까?
  • @muru 이 문제를 해결하고 해결책을 찾은 후에는 perlbrew가 ' 확실히 iv id = “가 아니기 때문에 문제가있는 것 같습니다. ' 82bb9a685b “>

sense " $SHELL가 올바른 셸로 설정되지 않은 경우 셸은 [t] csh입니다. C-shell 스크립트 (#!/bin/csh -f). Perlbrew는이를 Bourne 쉘로 가정하고 ' Bourne 쉘 명령을 사용하여 환경을 설정합니다. 이는 perlbrew use를 실행하기 전에 source <perlbrew path>/perlbrew/etc/cshrc를 실행하더라도 발생합니다. perlbrew cshrc에 setenv SHELL /bin/csh를 삽입하여이 문제를 해결했습니다.

Answer

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 

댓글

  • 여러 테스트를 거친 후 알 수 있듯이 $ shell은 실제 환경이 아닙니다. 변수이지만 셸 해석 변수입니다. echo $shell는 스크립트에서 /bin/tcsh를 반환하지만 env | grep -i shell가 cron에서 올바른 변수를 찾지 못했습니다. 다른 곳 (예 : 이 답변 )에서 $SHELL를 설정해야합니다. 실제로 활성 로그인 셸에서는 설정되어 있습니다. 내가 ' $SHELL를 얻지 못하는 유일한 위치는 cron.

Answer

SHELL 변수를 설정해야합니다. crontrab의 /bin/csh에 다음을 통해 크론 환경 변수를 확인할 수 있습니다.

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

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

SO : 크론이 스크립트를 실행하는 환경을 시뮬레이션하는 방법

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다