Esta é uma pergunta em que a resposta é complicada. O que a maioria das pessoas chama de "shell" é um Read-Eval-Print Loop e, portanto, até mesmo um interpretador python é um shell, desde que você esteja executando python interativamente. No entanto, isso significaria que a nologina não é uma casca real! Então, o que é uma concha?
Tecnicamente falando, qualquer programa pode ser usado como um shell. Na verdade, aqui estão algumas fotos minhas usando invólucros incomuns:
- Shell Python como o shell de login
-
Nano como shell (embora não seja possível distinguir entre a execução normal, já que é tela cheia)
- Cat funcionando como um shell
-
Top rodando como um shell (mesmo que você não consiga vê-lo como um shell)
- E um programa mundial de olá!
No entanto, isso não é o que você esperaria estar executando como shells. Normalmente, você desejará estar executando um dos shells em /etc/shells
. Por exemplo, o meu contém:
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
/usr/bin/tmux
/usr/bin/screen
e nenhuma das conchas que mencionei anteriormente! Então, por que eles correm?
Para simplificar, eles fazem, mas apenas localmente. Se você examinar a% man_de% manpage com shells
, descobrirá que man shells
é usado principalmente por programas como daemons FTP. É por isso que você não vê o /etc/shells
shell em nologin
: ele impede o login no FTP e outros daemons que não são de login por não estarem lá, enquanto impede o login localmente por ser um simples programa /etc/shells
, e não um REPL.
Portanto, para responder à sua pergunta: Existe apenas um tipo de shell, e isso é executável. Se você pode rodar um programa, é um shell.