나는 터미널이 쉘에 불과하다는 것을 읽었으며 Unix는 다른 종류의 쉘을 제공합니다.
- 본 쉘 (sh)
- C 쉘 (CSH)
- TC 쉘 (tcsh)
- Korn 쉘 (ksh)
- Bourne Again 쉘 (bash)
질문 :
- 터미널 창을 열면 기본적으로 어떤 쉘이 열립니까?
- 설치된 쉘 수를 어떻게 확인합니까?
- 내 계정에서 사용 된 쉘을 어떻게 변경합니까?
나는 터미널이 쉘에 불과하다는 것을 읽었으며 Unix는 다른 종류의 쉘을 제공합니다.
답변:
터미널에 다음 명령을 입력하여 사용중인 쉘을 확인할 수 있습니다.
echo $0
bash ( Bourne Again Shell ) 터미널을 사용하는 경우 결과는 다음과 유사합니다 .
-bash
0
환경 변수는?
csh
. % echo $0 No file for $0.
하지만 그것을 위해 작동 하는가tcsh
bash
같은sh
echo $0
, ls -l `which <name>`
그것을 다른 쉘 바이너리에 심볼릭 링크되어 있는지.
기본 환경에있는 쉘을 찾으려면 SHELL
환경 변수 의 값을 확인할 수 있습니다 .
echo $SHELL
현재 쉘 인스턴스를 찾으려면 현재 쉘 인스턴스의 PID를 갖는 프로세스 (쉘)를 찾으십시오.
현재 쉘 인스턴스의 PID를 찾으려면 다음을 수행하십시오.
echo "$$"
PID가있는 프로세스를 찾으려면 다음을 수행하십시오.
ps -p <PID>
함께 정리 :
ps -p "$$"
echo $SHELL
준 /bin/csh
과 ps -p $$
준 22673 pts/1 00:00:00 bash
. Kingmilo은 왜 그들이 동일하지 않은지 설명했습니다.
$SHELL
기본 쉘을 제공합니다.
$0
현재 쉘을 제공합니다.
예를 들어 : 터미널 응용 프로그램에 사용하는 기본 쉘로 bash가 있습니다. 그러나 iTerm2 앱의 경우 창이 열리면 명령을 사용합니다 /bin/ksh
.
그래서
$0
저는 /bin/ksh
iTerm2를 제공합니다 .
$SHELL
저를 제공 /bin/bash
iTerm2에.
터미널 $0
에서 $SHELL
알려줍니다/bin/bash
bash
하려면 터미널에 입력해야합니다 . zsh로 다시 전환하려면zsh
사용자의 기본 쉘이 무엇인지 알기 위해 다음을 실행할 수 있습니다.
echo "$SHELL"
예를 들어 Bash를 사용하는 경우 다음과 같은 결과가 나타납니다.
/bin/bash
구성을 변경하지 않은 경우 Bash 이후 Bash 여야합니다. Ubuntu의 기본 셸입니다.
/bin/sh
내 답변에 언급 이 없습니다
$$
변수는 실제로 POSIX에 의해 정의 된 껍질의 대부분에서 작동합니다. 물고기는 여기서 표준을 따르지 않기로 결정했기 때문에 그것을 무시하는 것이 공정하다고 생각합니다. $$
sh, dash, bash, zsh, ksh, ash, tcsh 및 csh에서 예상대로 작동 하는지 확인할 수 있습니다 . 사실, 내 머리 꼭대기에서 나는 그것이 작동하지 않는 물고기를 제외한 다른 껍질을 생각할 수 없습니다.
다른 답변은 쉘 특정 기능을 사용하는 경향이 있지만 사용중인 쉘을 찾으려고하므로 문제에 대한 답변을 가정합니다. 예를 들어 물고기에 대한 답변은 없습니다.
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 개선 주셔서 감사합니다
ppid=
/ cmd=
을 사용 하여 헤더 (및 tail -1
s) 를 생략하고 /proc/.../exe
실행중인 파일을 확인하십시오 ( cmd
쉘을 실행 한 결과 출력을 조작 할 수 있기 때문에 ).
원래 게시물에는 세 가지 질문이있었습니다. 주어진 답변은 첫 번째 질문 인 "터미널 창을 열면 어떤 쉘이 기본적으로 열려 있습니까?" 또한 "터미널에서 현재 실행중인 쉘을 어떻게 알 수 있습니까?"라는 질문에 대답하지 않았습니다. 그러나 내가 아는 한, 원래 질문 한 두 번째 또는 세 번째 질문, 즉 "설치된 쉘 수를 어떻게 확인합니까?"에 아무도 대답하지 않았습니다. "계정에서 사용 된 쉘을 어떻게 변경합니까?"
고양이 / 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