대화형 C-셸에 대한 경로 설정

대화형 C-셸에 대한 경로 설정

내 기본 쉘(Ubuntu)은 bash입니다. 그러나 특정 프로그램의 경우 C-shell로 변경해야 합니다. 이를 위해 .cshrc 파일을 설정했지만 대화식으로 C-shell로 변경하면(이 경우 tcsh 명령을 사용함) 모든 bash 경로를 가져오는 것을 볼 수 있습니다.

일부 경로가 실행해야 하는 프로그램과 호환되지 않기 때문에 이러한 경로 가져오기를 중지할 수 있는 방법이 있습니까? 즉, C 쉘 환경에 있을 때 필요한 모든 것을 .cshrc 파일에 정의하여 제어할 수 있기를 원합니다. 그러나 로그인 셸을 영구적으로 변경하고 싶지 않습니다.

답변1

환경 변수는 항상 상위 프로세스에서 상속되므로[†] .cshrc불필요한 환경 변수는 수동으로 설정하거나 제거해야 합니다.

setenv PATH /bin:/other/dirs/here:/and/more
unsetenv PS1

이는 상호 배타적인 작업입니다(불행히도 영어 "or"에는 부울 특이성이 부족합니다). 환경변수를 setenv PATH설정 하고 불필요한 환경을 제거합니다. 그렇게 하면 CPU 주기만 낭비됩니다. 대신 원하는 대로 설정하세요. (편집은 분할 하고 각 디렉터리 요소에 코드를 적용하는 등의 작업이 더 복잡한 작업입니다 . 굳이 귀찮게 할 필요가 있나요? 필요한 대로 설정하세요.)PATHunsetenv PS1PS1unsetenv PATHsetenv PATH ...PATHPATH:PATH

또는 env -i csh완전히 빈 환경을 사용할 수 있습니다. 이 경우 .cshrc필요한 모든 항목을 설정하는 것이 좋습니다(다양한 기본 환경 변수는 login(1)로 설정되거나 동등하게 설정됩니다 HOME).

$ env perl -E 'say $ENV{SHELL}'  
/opt/local/bin/mksh
$ env -i perl -E 'say $ENV{SHELL}'

$ 

[†] Bourne 쉘 은 )을 사용하여 via Complex를 통해 하위 프로세스에 전달되는 변수를 표시함으로써에 쉘 전용 변수를 배치한PS1나머지 변수와 동일한 네임스페이스 쉘의 복잡함 없이 무슨 일이 일어나고 있는지에 대한 자세한 내용은 및 매뉴얼 페이지를 참조하십시오 .exportextern char **environenviron(7)execve(2)

답변2

이러한 경로 가져오기를 중지하는 방법이 있나요?

편집 중이 .cshrc거나 .tcshrc무엇이든 허용하는 것이 좋습니다.환경 변수원하지 않거나 값을 변경하려는 개체가 전달되었습니다.tcsh. 그런 다음 설정을 해제하거나 값을 수정하세요.그게 다야thrig의 훌륭한 답변수행 방법을 설명했습니다.

그러나 당신은할 수 있는원하는 대로 정확하게 수행하십시오. tcsh필요하지 않은 환경 변수 없이 실행하거나 다른 값을 지정하십시오.

tcsh당신이 탈출 하는 경우본 스타일 쉘좋다bash그 다음에VAR=val명령 바로 앞에 쓸 수 있습니다 .이 명령에 대한 환경 변수를 설정합니다. 예를 들어:

PATH=/sbin:/bin:/usr/sbin:/usr/bin tcsh

이것은아니요별도의 명령으로 할당을 실행하는 것과 같습니다(뒤에 개행 문자나 문자를 추가하여 ;). 이렇게 하면 변수가 환경으로 내보내지지 않습니다.하위 프로세스와 마찬가지로 tcsh다음 명령 실행이 완료된 후에도 할당은 유지됩니다.

다음과 같은 방법으로 여러 환경 변수를 설정할 수도 있습니다.

BAR=barval PATH=/sbin:/bin:/usr/sbin:/usr/bin tcsh

다음에서 실행되는 후속 명령에 대해 환경 변수는 변경되지 않은 상태로 유지됩니다 bash.

ek@Io:~$ echo "$LANG"
en_US.UTF-8
ek@Io:~$ LANG=C tcsh -c 'echo "$LANG"'
C
ek@Io:~$ echo "$LANG"
en_US.UTF-8

같은 방법으로 환경 변수에 빈 문자열을 할당할 수 있습니다.

FOO= tcsh

그러나 이는 환경에서 변수를 완전히 제거하는 것과는 다릅니다. 이를 위해 다음을 사용할 수 있습니다.env옵션이 있는 명령 -u:

env -u FOO tcsh

당신은 또한 수놓다환경 변수 env:

env PATH=/sbin:/bin:/usr/sbin:/usr/bin tcsh

넌 보통 그렇지 않아필요그러나 구문이 지원되므로 bash이는 불가능합니다 .bashVAR=val

env단일 명령으로 여러 환경 변수를 설정할 수 있으며 변수를 설정 해제할 수도 있습니다. 즉, 당신이 그렇게한다는 뜻입니다아니요링크 env명령이 필요합니다. 예를 들어 다음을 사용할 수 있습니다.

env -u FOO BAR=barval PATH=/sbin:/bin:/usr/sbin:/usr/bin tcsh

실제 명령 env실행은 기호를 포함하지 않는 첫 번째 비옵션 인수로 시작됩니다 =.

관련 정보