Como mostrartodoshell de linha de comando instalado, (ou seja bash
, zsh
,etc.), sem duplicatas e nada mais (ou seja, nenhum programa que não seja shell)? Este código quase funciona no meuLubuntusystem, (que tem dash
, ksh
, zsh
e csh
) yash
, mas imprime whiptail
e não consegue imprimir 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
Responder1
No FreeBSD, TrueOS/PC-BSD, DragonFly BSD, et al.
A lista deaprovadoshells, ou seja, shells que o administrador permite que os usuários alterem seusshell de logincom o chsh
comando, está no /etc/shells
arquivo convencional. Um simples
gato /etc/conchasfornece a lista de shells aprovados.
No entanto, esta não é bem a lista deinstaladocartuchos. Embora muitos shells de terceiros (o próprio sistema operacional que vem com os shells Almquist e TENEX C) se instalem /etc/shells
quando instalados a partir de pacotes ou ports, isso não é garantido e é claro que o administrador pode ter mudado /etc/shells
para que haja um shell que foiinstaladomas isso não éaprovado.
A lista deinstaladoconchas não são difíceis de encontrar, no entanto. Conforme mencionado acima, os shells Almquist e TENEX C vêm com o sistema operacional, como /bin/sh
e /bin/tcsh
(também conhecido como /bin/csh
), respectivamente. A eles adiciona-se a lista de shells que são instalados a partir de pacotes. No sistema de pacotes do FreeBSD, todos os shells estão na shells/
área da hierarquia de pacotes, então basta usar a pkg
ferramenta para consultar o banco de dados de pacotes instalados:
consulta pacote "%o %n-%v %c" | awk '/^conchas\// {$1="";imprimir $0;}'
Isso capturará fish, rc, v7sh, heirloom-sh e similares, se alguém os tiver instalado, mas também produzirá um punhado de falsos positivos para pacotes que estão na shells/
hierarquia, mas que não são shells per se, como bash-completion .
Leitura adicional
- cartuchos/. Árvore de portas do FreeBSD. freebsd.org.
pkg-query
. Manual do FreeBSD. 2015. freebsd.org.
No OpenBSD
OpenBSD é como FreeBSD, TrueOS et al. com algumas diferenças. Um ainda corre
gato /etc/conchaspara ver a lista de shells aprovados, e ainda há a diferença entre shells aprovados e instalados.
Porém, o OpenBSD possui um gerenciador de pacotes mais antigo e um conjunto diferente de shells que vêm no próprio sistema operacional.
No OpenBSD, o próprio sistema operacional vem com o shell Korn (pdksh, especificamente) e o shell C (não o shell TENEX C) como /bin/sh
(também conhecido como /bin/ksh
) e /bin/csh
(not /bin/tcsh
), respectivamente.
Novamente, os shells de terceiros adicionados a essa lista estão na shells/
área da hierarquia de pacotes, e o comando para encontrar os instalados é, portanto
pkg_info -P -A | grep '^conchas/'
Se você tiver o pacote sqlports instalado, também poderá usá-lo sqlite3
para fazer consultas SQL no /usr/local/share/sqlports
banco de dados para localizar pacotes shell instalados.
Leitura adicional
- cartuchos/. Árvore de portas OpenBSD. portos.su.
pkg_info
. Manual do OpenBSD. 2016. openbsd.org.
No Debian, Ubuntu, e outros.
Novamente, a lista de projéteis aprovados pode ser obtida com
gato /etc/conchase novamente esta não é a mesma lista de shells instalados.
No Debian e Ubuntu,todoshell é gerenciado pelo gerenciador de pacotes. Não existem shells que "vêm com o sistema operacional".
Novamente, todos os pacotes shell são facilmente marcados. APT (a Advanced Packaging Tool) tem a noção de "seções" em vez de uma hierarquia como os mundos de ports/pacotes BSD têm, e os pacotes shell estão na Shells
seção.
Existem diversas ferramentas que podem consultar o banco de dados do gerenciador de pacotes. Eu escolho aptitude
aqui. Um corre
pesquisa de aptidão '~i~sshells'que procura por pacotes instalados (
~i
) na seção ( ~s
) chamada shells
.
Esta é aptitude
a sintaxe de pesquisa "abreviada". A sintaxe de pesquisa "verdadeira" seria '?installed ?section(shells)'
qual é um pouco mais digitada. Além disso: você pode aptitude
imprimir mais informações sobre cada pacote com sua -F
opção de linha de comando. Considerar
pesquisa de aptidão -F '%p %v %t %d' '~i~sshells'por exemplo.
Leitura adicional
- Cartuchos. pacotes.debian.org.
- Daniel Burrows e Manuel A. Fernández Montecelo (2016).manual do usuário do aptitude. Debian.
Responder2
Você poderia usar o /etc/shells
arquivo. Deve conter uma lista de shells de login válidos.