터미널에서 어떤 쉘을 사용하고 있는지 테스트하는 방법은 무엇입니까? 사용하고 있는지 확인하는

터미널에서 어떤 쉘을 사용하고 있는지 확인하는 방법은 무엇입니까? MacOS에서 사용중인 쉘은 무엇입니까?



답변

가장 신뢰할 수있는 것부터 가장 신뢰할 수없는 것까지 (그리고 가장 적은 것의 “무거운”) 몇 가지 방법 :

  1. ps -p$$ -ocmd=. (Solaris에서는이 fname대신 cmd이어야합니다. OSX 및 BSD에서는 command대신 이어야합니다 cmd.)
  2. 확인 $BASH_VERSION, $ZSH_VERSION및 기타 쉘 특정 변수.
  3. 확인 $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