터미널에서 사용 중인 셸을 어떻게 테스트하나요?

터미널에서 사용 중인 셸을 어떻게 테스트하나요?

터미널에서 어떤 쉘을 사용하고 있는지 어떻게 확인할 수 있나요? MacOS에서는 어떤 쉘을 사용합니까?

답변1

가장 신뢰할 수 있는 것부터 가장 덜 신뢰할 수 있는 것까지(가장 "무거운" 것부터) 여러 가지 방법이 있습니다.

  1. ps -p$$ -ocmd=. (Solaris에서는 이어야 하며 ps -p$$ -ofname=, macOS 및 BSD에서는 이어야 합니다 ps -p$$ -ocommand=.)
  2. $BASH_VERSION$ZSH_VERSION기타 쉘 관련 변수를 확인합니다 .
  3. 보기 $SHELL; 이것은 귀하를 지정하는 최후의 수단입니다.기본쉘이 반드시 필요한 것은 아닙니다현재의껍데기.

답변2

내 시스템에 설치된 4개의 셸(bash, dash, zsh, csh)에서 다음을 수행할 수 있다는 것을 알았습니다.

$ ps -p $$

다음은 zsh, bash 및 dash에 적용되지만 csh에는 적용되지 않습니다.

$ echo $0

답변3

질문은 사용된 셸에 대해 묻고 전달된 잠재적 인수에 대해 논의하지 않으므로 이를 표시하지 않는 방법이 있습니다.

$ ps -o comm= -p $$
ksh93 

답변4

매우 간단한 두 가지 방법이 있습니다.

  • 사용메모주문하다:

    ps -o comm= $$
    

    또는

    ps -h -o comm -p $$
    

    어디:

    • -h또는 =헤더를 표시하지 않으려면 모든 옵션을 완료하세요.
    • -o comm프로세스 기본 이름만 표시됩니다( bash대신 /bin/bash).
    • -p <PID>PID의 테이블 목록을 제공하는 프로세스만 나열됩니다.
  • 사용/프로세스의사 파일 시스템의 프로세스 정보:

    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

관련 정보