En FreeBSD, TrueOS/PC-BSD, DragonFly BSD y otros.

En FreeBSD, TrueOS/PC-BSD, DragonFly BSD y otros.

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, zshy csh) yash, pero imprime whiptaily 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 chshcomando, está en el archivo convencional /etc/shells. Un simple

gato /etc/conchas
le 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/shellscuando se instalan desde paquetes o puertos, esto no está garantizado y, por supuesto, el administrador puede haber cambiado /etc/shellspara 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/shy /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 pkgherramienta 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/conchas
para 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 sqlite3para realizar consultas SQL en la /usr/local/share/sqlportsbase de datos para encontrar paquetes de shell instalados.

Otras lecturas

  • conchas/. Árbol de puertos de OpenBSD. puertos.su.
  • pkg_info. manual de openbsd. 2016. openbsd.org.

En Debian, Ubuntu y otros.

Nuevamente, la lista de depósitos aprobados se puede obtener con

gato /etc/conchas
y 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 Shellssección.

Existen varias herramientas que pueden consultar la base de datos del administrador de paquetes. Elijo aptitudeaquí. uno corre

búsqueda de aptitud '~i~sshells'
que busca ~ipaquetes instalados ( ) en la sección ( ~s) denominada shells.

Ésta es aptitudela 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 aptitudeimprimir más información sobre cada paquete con su -Fopción de línea de comandos. Considerar

búsqueda de aptitud -F '%p %v %t %d' '~i~sshells'
Por ejemplo.

Otras lecturas

Respuesta2

Podrías usar el /etc/shellsarchivo. Debe contener una lista de shells de inicio de sesión válidos.

información relacionada