표시 방법모든설치된 명령줄 셸(예: bash
, zsh
,등.), 중복도 없고 다른 것도 없습니다(즉, 쉘이 아닌 프로그램이 없습니다)? 이 코드는 거의 내에서 작동합니다.루분투시스템( , , dash
및 포함 )이 인쇄되지만 인쇄 에 실패함 :ksh
zsh
csh
yash
whiptail
yash
apropos shell | grep sh | \
sed 's/ .*//;s/.*/which &/e;/^\/bin\//!d;s/.*/realpath &/e;/^\/bin\//!d' | \
sort -u | xargs whatis
bash (1) - GNU Bourne-Again SHell
bsd-csh (1) - a shell (command interpreter) with C-like syntax
dash (1) - command interpreter (shell)
ksh93 (1) - KornShell, a command and programming language
lksh (1) - Legacy Korn shell built on mksh
mksh (1) - MirBSD Korn shell
whiptail (1) - display dialog boxes from shell scripts
zsh5 (1) - the Z shell
답변1
FreeBSD, TrueOS/PC-BSD, DragonFly BSD 등에서.
목록승인됨쉘, 즉 관리자가 사용자에게 변경을 허용하는 쉘로그인 쉘명령 을 사용하려면 chsh
기존 /etc/shells
파일에 있습니다. 간단한
고양이 /etc/shells승인된 포탄 목록을 제공합니다.
그러나 이는 목록에 포함되지 않습니다.설치됨껍질. 많은 타사 셸(Almquist 및 TENEX C 셸과 함께 제공되는 운영 체제 자체)은 /etc/shells
패키지나 포트에서 설치할 때 자동으로 설치되지만 이는 보장되지 않으며 물론 관리자가 /etc/shells
해당 셸이 있도록 변경했을 수 있습니다.설치됨하지만 그건 그렇지 않아승인됨.
목록설치됨하지만 껍질은 구하기 어렵지 않습니다. 앞서 언급했듯이 Almquist 및 TENEX C 쉘에는 각각 /bin/sh
및 /bin/tcsh
(일명 /bin/csh
) 운영 체제가 함께 제공됩니다. 여기에 패키지에서 설치된 쉘 목록이 추가됩니다. FreeBSD 패키지 시스템에서 모든 쉘은 shells/
패키지 계층 구조 영역 에 있으므로 pkg
도구를 사용하여 설치된 패키지 데이터베이스를 쿼리하기만 하면 됩니다.
pkg 쿼리 "%o %n-%v %c" | awk '/^쉘\// {$1="";print $0;}'
shells/
이것은 fish, rc, v7sh, heirloom-sh 등을 설치한 경우 잡아 내지만 계층 구조에 있지만 bash-completion과 같은 자체 쉘이 아닌 패키지에 대해 소수의 오탐지를 생성합니다. .
추가 읽기
OpenBSD에서
OpenBSD는 FreeBSD, TrueOS et al과 같습니다. 약간의 차이점이 있습니다. 한 명은 아직도 달리고 있어요
고양이 /etc/shells승인된 쉘 목록을 보려면 승인된 쉘과 설치된 쉘 사이에 여전히 차이가 있습니다.
OpenBSD에는 오래된 패키지 관리자와 운영 체제 자체에 포함된 다른 쉘 세트가 있습니다.
OpenBSD에서 운영 체제 자체에는 Korn 쉘(구체적으로 pdksh)과 C 쉘(TENEX C 쉘이 아님)이 각각 /bin/sh
(일명 /bin/ksh
) 및 /bin/csh
(아님 /bin/tcsh
)으로 제공됩니다.
다시 말하지만 해당 목록에 추가하는 타사 쉘은 shells/
패키지 계층 구조 영역에 있으므로 설치된 쉘을 찾는 명령은 다음과 같습니다.
pkg_info -P -A | grep '^쉘/'
sqlite3
sqlports 패키지가 설치되어 있는 경우 데이터베이스 에 대해 SQL 쿼리를 작성하여 /usr/local/share/sqlports
설치된 쉘 패키지를 찾는 데 사용할 수도 있습니다 .
추가 읽기
데비안, 우분투 등.
다시 한번, 승인된 쉘 목록은 다음을 통해 얻을 수 있습니다.
고양이 /etc/shells그리고 이것은 설치된 쉘 목록과 동일하지 않습니다.
데비안과 우분투에서는모든쉘은 패키지 관리자에 의해 관리됩니다. "운영 체제와 함께 제공되는" 쉘은 없습니다.
다시 말하지만, 모든 쉘 패키지는 쉽게 표시됩니다. APT(고급 패키징 도구)에는 BSD 포트/패키지 세계의 계층 구조가 아닌 "섹션"이라는 개념이 있으며 쉘 패키지는 섹션에 있습니다 Shells
.
패키지 관리자의 데이터베이스를 쿼리할 수 있는 도구는 여러 가지가 있습니다. 저는 aptitude
여기를 선택합니다. 하나는 실행
적성검색 '~i~sshells'
~i
섹션 ( ~s
) 에서 설치된 ( ) 패키지를 검색합니다 shells
.
이것은 aptitude
의 "약칭" 검색 구문입니다. "진정한" 검색 구문은 '?installed ?section(shells)'
입력하기가 다소 더 많은 것입니다. 또한 명령줄 옵션을 aptitude
사용하여 각 패키지에 대한 자세한 정보를 인쇄 할 수 있습니다. -F
고려하다
적성 검색 -F '%p %v %t %d' '~i~sshells'예를 들어.
추가 읽기
- 포탄. packages.debian.org.
- 다니엘 버로우스와 마누엘 A. 페르난데스 몬테셀로(2016).적성 사용자 매뉴얼. 데비안.
답변2
파일 을 사용하시면 됩니다 /etc/shells
. 여기에는 유효한 로그인 셸 목록이 포함되어야 합니다.