터미널에서 어떤 쉘을 사용하고 있는지 확인하는 방법은 무엇입니까? MacOS에서 사용중인 쉘은 무엇입니까?
답변
가장 신뢰할 수있는 것부터 가장 신뢰할 수없는 것까지 (그리고 가장 적은 것의 “무거운”) 몇 가지 방법 :
ps -p$$ -ocmd=
. (Solaris에서는이fname
대신cmd
이어야합니다. OSX 및 BSD에서는command
대신 이어야합니다cmd
.)- 확인
$BASH_VERSION
,$ZSH_VERSION
및 기타 쉘 특정 변수. - 확인
$SHELL
; 기본 쉘을 지정 하고 반드시 현재 쉘일 필요는 없으므로 최후의 수단 입니다.
답변
내 시스템에 설치 한 4 개의 쉘 (bash, dash, zsh, csh)에서 다음이 작동 함을 발견했습니다.
$ ps -p $$
다음은 zsh, bash 및 dash에서는 작동하지만 csh에서는 작동하지 않습니다.
$ echo $0
답변
질문에 사용 된 쉘을 요구하고 전달 된 잠재적 인 인수에 대해 이야기하지 않기 때문에 여기에 표시하지 않는 방법이 있습니다.
$ ps -o comm= -p $$
ksh93
답변
더 가벼운 구현 (Android 전화, busybox 등)에 대한 참고 사항은 스위치 ps
를 항상 지원 -p
하지는 않지만 다음과 같은 명령으로 검색을 수행 할 수 있습니다 ps | grep "^$$ "
. (이 grep
정규식은 PID를 고유하게 식별하므로 오 탐지가 없습니다.
답변
두 가지 간단한 방법이 있습니다.
-
ps 명령 사용 :
ps -o comm= $$
또는
ps -h -o comm -p $$
어디:
-h
또는=
헤더를 표시하지 않기 위해 모든 옵션을 마무리합니다 .-o comm
프로세스 기본 이름 만 표시합니다 (bash
대신/bin/bash
).-p <PID>
PID 양식 목록을 지원하는 프로세스 만 나열하십시오.
-
은 Using / PROC 프로세스 정보의 가상 파일 시스템 :
cat /proc/$$/comm
이 옵션은
ps
위 의 명령 과 동일하게 작동합니다 .또는
readlink /proc/$$/exe
이것은
/proc/PID/exe
실행중인 파일에 연결되며,이 경우 / bin / bash, / bin / ksh 등을 가리 킵니다.쉘의 이름 만 얻으려면 다음을 사용할 수 있습니다.
basename $(readlink /proc/$$/exe)
이 옵션은 스크립트, 소스 코드 또는 터미널에있는 경우에도 사용중인 쉘 인터프리터의 이진에 대한 링크와 같은 결과를 항상 제공하는 유일한 옵션입니다.
경고 이것은 궁극적 인 바이너리를 보여줄 것이므로 ksh는 ksh93에 연결되거나 sh는 bash에 연결될 수 있습니다.
의 사용법은 현재 명령의 PID에 연결 /proc
되는를 통해 실제로 유용합니다 /proc/self
.
답변
Mac (comm), Solaris (fname) 및 Linux (cmd)와 호환되는 다른 모든 답변의 혼합 :
ps -p$$ -o cmd="",comm="",fname="" 2>/dev/null | sed 's/^-//' | grep -oE '\w+' | head -n1
답변
환경 변수에 저장 한 경우 다음을 사용할 수 있습니다.
echo $SHELL