como mostrarcadashell de línea de comandos instalado, (es decir bash
, zsh
,etc.), sin duplicados y nada más (es decir, sin programas que no sean shells). Este código casi funciona en miLubuntusistema (que tiene dash
, ksh
, zsh
y csh
) yash
, pero imprime whiptail
y no imprime 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
Respuesta1
En FreeBSD, TrueOS/PC-BSD, DragonFly BSD y otros.
La lista deaprobadoshells, es decir, shells en los que el administrador permite a los usuarios cambiar sushell de inicio de sesióncon el chsh
comando, está en el archivo convencional /etc/shells
. Un simple
gato /etc/conchasle da la lista de proyectiles aprobados.
Sin embargo, esta no es exactamente la lista deinstaladoconchas. Aunque muchos shells de terceros (el sistema operativo en sí viene con los shells Almquist y TENEX C) se instalan ellos mismos /etc/shells
cuando se instalan desde paquetes o puertos, esto no está garantizado y, por supuesto, el administrador puede haber cambiado /etc/shells
para que haya un shell que fuerainstaladopero eso no esaprobado.
La lista deinstaladoSin embargo, no es difícil conseguir conchas. Como se mencionó anteriormente, los shells Almquist y TENEX C vienen con el sistema operativo, como /bin/sh
y /bin/tcsh
(también conocido como /bin/csh
) respectivamente. A ellos se les agrega la lista de shells que se instalan desde paquetes. En el sistema de paquetes de FreeBSD, todos los shells están en el shells/
área de la jerarquía de paquetes, por lo que simplemente se usa la pkg
herramienta para consultar la base de datos de paquetes instalados:
consulta de paquete "%o %n-%v %c" | awk '/^conchas\// {$1="";imprimir $0;}'
Esto capturará fish, rc, v7sh, heirloom-sh y similares si uno los tiene instalados, pero también generará un puñado de falsos positivos para paquetes que están en la shells/
jerarquía pero que no son shells per se, como bash-completion. .
Otras lecturas
- conchas/. Árbol de puertos de FreeBSD. freebsd.org.
pkg-query
. Manual de FreeBSD. 2015. freebsd.org.
En OpenBSD
OpenBSD es como FreeBSD, TrueOS et al. con algunas diferencias. uno todavía corre
gato /etc/conchaspara ver la lista de carcasas aprobadas, y todavía existe la diferencia entre carcasas aprobadas e instaladas.
Sin embargo, OpenBSD tiene un administrador de paquetes más antiguo y un conjunto diferente de shells que vienen en el propio sistema operativo.
En OpenBSD, el sistema operativo en sí viene con el shell Korn (pdksh, específicamente) y el shell C (no el shell TENEX C) como /bin/sh
(también conocido como /bin/ksh
) y /bin/csh
(no /bin/tcsh
) respectivamente.
Nuevamente, los shells de terceros que se agregan a esa lista están en el shells/
área de la jerarquía de paquetes y, por lo tanto, el comando para encontrar los instalados es
pkg_info -P -A | grep '^conchas/'
Si tiene instalado el paquete sqlports, también puede utilizarlo sqlite3
para realizar consultas SQL en la /usr/local/share/sqlports
base de datos para encontrar paquetes de shell instalados.
Otras lecturas
En Debian, Ubuntu y otros.
Nuevamente, la lista de depósitos aprobados se puede obtener con
gato /etc/conchasy nuevamente esto no es lo mismo que la lista de shells instalados.
En Debian y Ubuntu,cadashell es administrado por el administrador de paquetes. No hay shells que "vienen con el sistema operativo".
Nuevamente, todos los paquetes de shell están fácilmente marcados. APT (la herramienta de empaquetado avanzado) tiene la noción de "secciones" en lugar de una jerarquía como lo tienen los mundos de puertos/paquetes BSD, y los paquetes shell están en la Shells
sección.
Existen varias herramientas que pueden consultar la base de datos del administrador de paquetes. Elijo aptitude
aquí. uno corre
búsqueda de aptitud '~i~sshells'que busca
~i
paquetes instalados ( ) en la sección ( ~s
) denominada shells
.
Ésta es aptitude
la sintaxis de búsqueda "abreviada" de 's. La sintaxis de búsqueda "verdadera" sería '?installed ?section(shells)'
cuál es algo más para escribir. Además: puede aptitude
imprimir más información sobre cada paquete con su -F
opción de línea de comandos. Considerar
búsqueda de aptitud -F '%p %v %t %d' '~i~sshells'Por ejemplo.
Otras lecturas
- Conchas. paquetes.debian.org.
- Daniel Burrows y Manuel A. Fernández Montecelo (2016).manual de usuario de aptitud. Debian.
Respuesta2
Podrías usar el /etc/shells
archivo. Debe contener una lista de shells de inicio de sesión válidos.