¿Cómo encontrar la lista de shells disponibles por línea de comandos?

20

¿Cómo enumerar los shells disponibles para usar en la línea de comandos?

Pandya
fuente
(IFS=: && grep -rl tcsetpgrp $PATH | xargs grep -rl setrlimit)en un sistema Debian parece dar una buena aproximación.
Stéphane Chazelas
En Fedora 20 regresa /bin/bash /bin/crash /bin/gdb(y los enlaces simbólicos de /usr/bin).
Cristian Ciupitu

Respuestas:

30

Para enumerar los shells de inicio de sesión válidos disponibles para usar en el momento, escriba el siguiente comando:

cat /etc/shells

Ejemplo:

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

Para obtener información sobre shell visite wikipedia .

Pandya
fuente
Tenga en cuenta que esto no funcionará para todos los sistemas. Por ejemplo, Solaris y HP-UX no tienen un archivo / etc / shells de forma predeterminada.
Warwick
¿Por qué tengo /bin/truey /bin/falseen esta lista?
Bernhard
2
@bernhard - Hay una buena explicación de / bin / true y / bin / false aquí enlace
Warwick
6

También puede usar chsh -l Esto imprimirá la lista de conchas.

Ejemplo:

[anurag@focused ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
Anurag Anand
fuente
3
Para mí,chsh: invalid option -- 'l'
Pandya
@Pandya puede proporcionar el comando completo que está utilizando. Es posible que lo esté utilizando con una combinación de otros métodos o construcciones de shell como ((...)) o [...] o [[]]
Anurag Anand
@Pandya man7.org/linux/man-pages/man1/chsh.1.html Esto proporciona la opción -l. Simplemente haga clic en el enlace en la parte superior de la página, para ir a la página de manual de linux-util
Anurag Anand
2

Al menos en OpenBSD y NetBSD:

$ getent shells

En (Ubuntu) Linux y muchos otros Unices (incluidos los BSD):

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

En Solaris, el archivo /etc/shellspuede no existir. La lista de shells válidos está contenida en el shells(4)manual. En mi sistema Vanilla Solaris 11.3, esto enumera los siguientes 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 la pena señalar que en mi instalación, /usr/sfw/bin/zshni /usr/xp4/bin/pfshexiste ni existe ...

Una lista más corta de shells válidos de Solaris (duplicados de cada shell eliminado):

/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
fuente