Como encontrar a lista de shells disponíveis por linha de comando?

20

Como listar shells disponíveis para uso pela linha de comando?

Pandya
fonte
(IFS=: && grep -rl tcsetpgrp $PATH | xargs grep -rl setrlimit)em um sistema Debian parece dar uma boa aproximação.
Stéphane Chazelas
No Fedora 20, ele retorna /bin/bash /bin/crash /bin/gdb(e os links simbólicos de /usr/bin).
Cristian Ciupitu

Respostas:

30

Para listar os shells de login válidos disponíveis para uso no momento, digite o seguinte comando:

cat /etc/shells

Exemplo:

pandya@pandya-desktop:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/ksh93

Para obter informações sobre o shell, visite a wikipedia .

Pandya
fonte
Observe que isso não funcionará para todos os sistemas. Por exemplo, Solaris e HP-UX não possuem um arquivo / etc / shells por padrão.
Warwick
Por que tenho /bin/truee /bin/falsenesta lista?
Bernhard
2
@bernhard - Há uma boa explicação de / bin / true e / bin / false aqui ligação
Warwick
6

Você também pode usar chsh -l Isso imprimirá a lista de cartuchos.

Exemplo: -

[anurag@focused ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
Anurag Anand
fonte
3
Para mim,chsh: invalid option -- 'l'
Pandya
@ Pandand você pode fornecer o comando completo que está usando. Você pode usá-lo com a combinação de outros métodos de shell ou construções como ((...)) ou [...] ou [[...]]
Anurag Anand
@Pandya man7.org/linux/man-pages/man1/chsh.1.html Isso fornece a opção -l. Basta clicar no link no topo da página, para ir para linux-util página man
Anurag Anand
2

Em pelo menos o OpenBSD e o NetBSD:

$ getent shells

No (Ubuntu) Linux e muitos outros Unices (incluindo BSDs):

$ grep '^[^#]' /etc/shells

No Solaris, o arquivo /etc/shellspode não existir. A lista de invólucros válidos está contida no shells(4)manual. No meu sistema Solaris 11.3 de baunilha, isso lista os seguintes shells:

/bin/bash         /usr/bin/bash     /bin/pfbash   /usr/bin/pfbash
/bin/csh          /usr/bin/csh      /bin/pfcsh    /usr/bin/pfcsh
/bin/jsh          /usr/bin/jsh      /sbin/jsh     /usr/sbin/jsh
/bin/ksh          /usr/bin/ksh      /bin/pfksh    /usr/bin/pfksh
/bin/ksh93        /usr/bin/ksh93    /bin/pfksh93  /usr/bin/pfksh93
/bin/sh           /usr/bin/sh       /bin/pfsh     /usr/bin/pfsh
/bin/tcsh         /usr/bin/tcsh     /bin/pftcsh   /usr/bin/pftcsh
/sbin/sh          /usr/xpg4/bin/sh  /sbin/pfsh    /usr/xp4/bin/pfsh
/bin/zsh          /usr/bin/zsh      /bin/pfzsh    /usr/bin/pfzsh
/usr/sfw/bin/zsh

Vale a pena notar que, na minha instalação, /usr/sfw/bin/zshnem /usr/xp4/bin/pfshexiste nem existe ...

Uma lista mais curta de shells Solaris válidos (duplicatas de cada shell removidas):

/bin/bash       /bin/ksh        /bin/pfcsh      /bin/pfsh       /bin/sh
/bin/csh        /bin/ksh93      /bin/pfksh      /bin/pftcsh     /bin/tcsh
/bin/jsh        /bin/pfbash     /bin/pfksh93    /bin/pfzsh      /bin/zsh
Kusalananda
fonte