어느 쉘에서 실행 중입니까?


39

내가 실행하면 echo $SHELL출력은 말한다 /bin/tcsh나는 실행하고 있음을 의미 tcsh쉘을. 그러나 예를 들어 다음 명령을 실행할 때

alias emacs 'emacs -nw' 

다음과 같은 오류가 발생합니다.

bash: alias: emacs: not found
bash: alias: emacs -nw: not found

내가 발행 alias emacs="emacs -nw"하면 정상적으로 실행됩니다!

실행 중이므로 혼란 스럽지만 tcsh명령은로 해석됩니다 bash.

이유가 무엇입니까?


tcsh/csh현재 쉘이 있습니다$shell
HongboZhu

답변:


48

$SHELL반드시 현재 쉘일 필요는 없으며 기본 로그인 쉘 입니다. 사용중인 쉘을 확인하려면

ps $$

이것은 psBSD 구문을 지원하는 최신 유닉스 / 리눅스에서 작동 합니다. 그렇지 않으면, 이것은 휴대용 (POSIX) 방식입니다

ps -p $$

실행중인 경우 다음과 같이 반환해야합니다 tcsh.

8773 pts/10   00:00:00 tcsh

tcsh기본 쉘 이 되려면 이를 사용 chsh하여 설정하십시오.


어떤 구성 파일이로드되었는지 확인할 수있는 방법을 알고 있습니까? (which bashrc)
coffeMug

@Coffe_Mug 무슨 뜻인지 잘 모르겠습니다. 당신과 기본 쉘을 설정할 수 있습니다 chsh, .bashrc당신이 난 경우 떠들썩한 파티를 실행) 읽기 전용되고 II) 대화 형, 비 로그인 쉘로 실행. 이 컴퓨터에 어떻게 로그인합니까?
terdon

tcsh 쉘 에서이 bash 쉘을 시작하는 스크립트가 있습니다.
coffeMug

4
왜 그렇지ps $$
cjm

1
@cjm 왜 실제로 답변을 편집하지 않았습니다.
terdon

8

명령 행에서 $0변수를 사용하여 사용중인 쉘을 판별 할 수도 있습니다 . 예 :

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

참고 : $ 0은 스크립트 자체이므로 스크립트 내에서 $ 0을 사용하여 쉘을 결정할 수 없습니다.


1

이것은 리눅스에서 작동합니다 :

lsof -a -p $$ -d txt

또는 더 강력한 선택이 필요한 경우 (더 많은 시스템) :

lsof -a +D /bin +D /usr/bin -p $$ -d txt

1

이것은 위의 모든 더 나은 답변에 대한 수정입니다. 한 지점에서 대시를 식별하는 작은 문제가있었습니다. 공유하는 것 같았다 :

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | sh
ash (dash 0.5.5.1 ff)

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | bash
bash 4.3.30(1)-release

좁은 장소에서의 문제 해결에 좋습니다. 건배.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.