사용중인 쉘을 어떻게 확인합니까?


357

나는 터미널이 쉘에 불과하다는 것을 읽었으며 Unix는 다른 종류의 쉘을 제공합니다.

  • 본 쉘 (sh)
  • C 쉘 (CSH)
  • TC 쉘 (tcsh)
  • Korn 쉘 (ksh)
  • Bourne Again 쉘 (bash)

질문 :

  • 터미널 창을 열면 기본적으로 어떤 쉘이 열립니까?
  • 설치된 쉘 수를 어떻게 확인합니까?
  • 내 계정에서 사용 된 쉘을 어떻게 변경합니까?



터미널은 셸에 대한 인터페이스이며 (실제로는 실제 인터페이스였던 적이 있음) 셸은 터미널이 아닙니다. 명령 해석기입니다. 참조 askubuntu.com/a/640105/295286
세르지 Kolodyazhnyy

답변:


426

터미널에 다음 명령을 입력하여 사용중인 쉘을 확인할 수 있습니다.

echo $0

bash ( Bourne Again Shell ) 터미널을 사용하는 경우 결과는 다음과 유사합니다 .

-bash

2
0환경 변수는?
Mi_Onim

43
@Mi_Onim $ 0은 실행중인 프로세스의 이름입니다. 쉘 내부에서 사용하면 쉘 이름이 반환됩니다. 스크립트 내에서 사용하면 스크립트 이름이됩니다.
kingmilo

2
참고 : 대화 형에서는 작동하지 않습니다 csh. % echo $0 No file for $0.하지만 그것을 위해 작동 하는가tcsh
세르지 Kolodyazhnyy

2
심볼릭 링크 인 경우 작동하지 않습니다. 마찬가지로 bash같은sh
안와르

9
당신의 쉘의 이름을 얻을 후 @Anwar은 좋은 포인트를 만들어 echo $0, ls -l `which <name>` 그것을 다른 쉘 바이너리에 심볼릭 링크되어 있는지.
JivanAmara

121

기본 환경에있는 쉘을 찾으려면 SHELL환경 변수 의 값을 확인할 수 있습니다 .

echo $SHELL

현재 쉘 인스턴스를 찾으려면 현재 쉘 인스턴스의 PID를 갖는 프로세스 (쉘)를 찾으십시오.

현재 쉘 인스턴스의 PID를 찾으려면 다음을 수행하십시오.

echo "$$"

PID가있는 프로세스를 찾으려면 다음을 수행하십시오.

ps -p <PID>

함께 정리 :

ps -p "$$"

27
$ SHELL은 시스템 (또는 사용자)의 기본 쉘이며, 일반적으로 주어진 순간에 실제로 사용되는 쉘입니다.
kingmilo

1
@kingmilo : 맞습니다. 수정되었습니다.
heemayl

postgres, jenkins 등을 설정하기 위해 'su-<username>'을 통해 사용자로 전환 할 때이 기능이 매우 유용하다는 것을 알았습니다.
bully

1
echo $SHELL/bin/cshps -p $$22673 pts/1 00:00:00 bash. Kingmilo은 왜 그들이 동일하지 않은지 설명했습니다.
18446744073709551615

나는 그들이 같다고 말하지 않았다. 답을 다시주의 깊게 읽으십시오. 기본현재 문구를 참고하십시오 .
heemayl

25

$SHELL기본 쉘을 제공합니다. $0현재 쉘을 제공합니다.

예를 들어 : 터미널 응용 프로그램에 사용하는 기본 쉘로 bash가 있습니다. 그러나 iTerm2 앱의 경우 창이 열리면 명령을 사용합니다 /bin/ksh.

그래서 $0저는 /bin/kshiTerm2를 제공합니다 . $SHELL저를 제공 /bin/bashiTerm2에. 터미널 $0에서 $SHELL알려줍니다/bin/bash


2
이것은 다른 최고 투표 답변의 좋은 명확성입니다. 감사합니다.
Michael Hoffmann

나에게 zsh가 설치되어 있고 현재 기본값이며 bash로 변경 bash하려면 터미널에 입력해야합니다 . zsh로 다시 전환하려면zsh
Yousuf Azad

8

사용자의 기본 쉘이 무엇인지 알기 위해 다음을 실행할 수 있습니다.

echo "$SHELL"

예를 들어 Bash를 사용하는 경우 다음과 같은 결과가 나타납니다.

/bin/bash

구성을 변경하지 않은 경우 Bash 이후 Bash 여야합니다. Ubuntu의 기본 셸입니다.


/ bin / sh는 Bourne Shell이 ​​아닌 Shell Command Language이므로 답변을 편집하십시오.
kingmilo

@kingmilo /bin/sh내 답변에 언급 이 없습니다
kos

@kol은 편집하기 전에있었습니다. 또한 $ SHELL은 시스템 (또는 사용자)의 기본 쉘이며, 일반적으로 주어진 순간에 실제로 사용되는 쉘입니다.
kingmilo

1
@kingmilo 답을 다시 읽고 나는 당신의 관심사가 무엇인지 이해한다고 생각합니다. 아마도 잘 표현하지 못했습니다. 나는 내 대답에서 "현재"의 의미를 분명히했다
kos

1
@frederickjh 물고기는 약간 이상한 것입니다. $$변수는 실제로 POSIX에 의해 정의 된 껍질의 대부분에서 작동합니다. 물고기는 여기서 표준을 따르지 않기로 결정했기 때문에 그것을 무시하는 것이 공정하다고 생각합니다. $$sh, dash, bash, zsh, ksh, ash, tcsh 및 csh에서 예상대로 작동 하는지 확인할 수 있습니다 . 사실, 내 머리 꼭대기에서 나는 그것이 작동하지 않는 물고기를 제외한 다른 껍질을 생각할 수 없습니다.
terdon의

8

다른 답변은 쉘 특정 기능을 사용하는 경향이 있지만 사용중인 쉘을 찾으려고하므로 문제에 대한 답변을 가정합니다. 예를 들어 물고기에 대한 답변은 없습니다.

sh -c 'ps -p $$ -o ppid=' | xargs ps -o comm= -p

대신 sh를 호출 할 때 $$ 구문을 사용하지만 PID가 아닌 PPID를 찾고 있습니다. PPID를 사용하여 cmd를 찾으십시오.

sh -c 'ps -p $$ -o ppid=' | xargs -I'{}' readlink -f '/proc/{}/exe'

@muru 개선 주셔서 감사합니다


2
ppid=/ cmd=을 사용 하여 헤더 (및 tail -1s) 를 생략하고 /proc/.../exe실행중인 파일을 확인하십시오 ( cmd쉘을 실행 한 결과 출력을 조작 할 수 있기 때문에 ).
muru

1
분명히이 때문에 비 POSIX 호환에, 비지 박스에서 작동하지 않습니다 : REF : github.com/broadinstitute/cromwell/pull/...을
에반 벤

4

원래 게시물에는 세 가지 질문이있었습니다. 주어진 답변은 첫 번째 질문 인 "터미널 창을 열면 어떤 쉘이 기본적으로 열려 있습니까?" 또한 "터미널에서 현재 실행중인 쉘을 어떻게 알 수 있습니까?"라는 질문에 대답하지 않았습니다. 그러나 내가 아는 한, 원래 질문 한 두 번째 또는 세 번째 질문, 즉 "설치된 쉘 수를 어떻게 확인합니까?"에 아무도 대답하지 않았습니다. "계정에서 사용 된 쉘을 어떻게 변경합니까?"

  • "설치된 쉘 수를 어떻게 확인합니까?" 다음 명령은 사용 가능한 모든 쉘을 나열합니다.

고양이 / etc / shells

예를 들어 Ubuntu 18.10의 기본 설치에서 다음을 제공합니다.

# / etc / shells : 유효한 로그인 쉘

/ bin / sh

/ bin / dash

/ bin / bash

/ bin / rbash

그러나 기본적으로 sh는 대시에 대한 심볼릭 링크 인 반면 rbash는 -r 옵션 ( "제한된 bash")을 사용하여 bash에 링크하므로 실제로는 위의 목록에서 알 수 있듯이 4 개가 아닌 2 개만 있습니다. 다음 명령은 나열된 쉘이 실제로 기호 링크인지 여부와 링크가있는 위치를 표시합니다. ls -l / bin

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