Estes são os meus pensamentos sobre os diferentes "tipos" de conchas - infelizmente eu não testemunhei o surgimento do Un * x desde o começo (eu assumo que este conceito é cultivado historicamente em uma boa extensão), então por favor ser crítico.
- Quando eu faço login em um sistema (atualmente, através do login gráfico X), pode haver algumas tarefas que devem ser executadas uma vez, por exemplo, estabelecer uma conexão com algum tipo de servidor, apresentar-me a lista de tarefas de hoje, autostart alguns comandos, etc. Isso não deve acontecer toda vez que eu abrir um novo terminal. Portanto, há um conjunto de arquivos de configuração (
/etc/profile,~/.bash_logine assim por diante, consulte o manual para obter uma lista precisa) originado somente por shells login . - Assim, para fechar as conexões, elimine alguns programas, execute um script de backup em que há
~/.bash_logoutquando o shell login existir. - então, o shell "normal" que eu uso em um terminal, não deve ser um shell login , mas deve ler minhas preferências pessoais de
~/.bashrc, porque eu quero que meus atalhos de teclado interajam com o shell - portanto, este é um shell interativo, sem login . - e por último, mas não menos importante quando o bash é usado para scripts, nada disso é importante.
bashdeve começar o mais rápido possível, ou seja, não deve ler nenhum arquivo de configuração. Este é um shell não interativo e não-login .
Então, minha resposta à sua pergunta O que perderíamos se tivéssemos apenas um tipo de shell? está em uma palavra: "Flexibilidade".
A resposta para sua segunda pergunta é fácil:
$- lista o conjunto atual de opções. Eles podem ser definidos pelos parâmetros da linha de comando como bash ou via set builtin. Então você tem que olhar para dois lugares no manual:
-
OPTIONSseção:-i If the -i option is present, the shell is interactive. -
SHELL BUILTIN COMMANDSseção, subseçãoset:-h Remember the location of commands as they are looked up for execution. This is enabled by default. -m Monitor mode. Job control is enabled. This option is on by default for interactive shells on systems that sup‐ port it (see JOB CONTROL above). Background processes run in a separate process group and a line containing their exit status is printed upon their completion. -B The shell performs brace expansion (see Brace Expansion above). This is on by default. -H Enable ! style history substitution. This option is on by default when the shell is interactive.