Eu li que o terminal não é nada além de shell, e o Unix oferece diferentes sabores de shell:
- Casca de Bourne (sh)
- C shell (csh)
- Shell TC (tcsh)
- Casca de Korn (ksh)
- Bourne Novamente shell (bash)
Questões:
- Quando abro uma janela de terminal, qual shell é aberto por padrão?
- Como verifico quantas conchas estão instaladas?
- Como altero o shell usado na minha conta?
command-line
LearNer969
fonte
fonte
Respostas:
Você pode digitar o seguinte comando no seu terminal para ver qual shell você está usando:
O resultado será semelhante ao abaixo se você estiver usando o terminal bash ( Bourne Again Shell ):
fonte
0
uma variável de ambiente?csh
.% echo $0 No file for $0.
, mas funciona paratcsh
bash
comosh
echo $0
,ls -l `which <name>`
para ver se ele está vinculado a outro binário do shell.Para encontrar o shell que você possui no ambiente padrão, você pode verificar o valor da
SHELL
variável de ambiente:Para localizar a instância atual do shell, procure o processo (shell) com o PID da instância atual do shell.
Para encontrar o PID da instância atual do shell:
Agora, para encontrar o processo com o PID:
Juntar as peças:
fonte
echo $SHELL
me deu/bin/csh
eps -p $$
me deu22673 pts/1 00:00:00 bash
. Kingmilo explicou (acima) por que eles não são os mesmos.$SHELL
fornece o shell padrão.$0
fornece o shell atual.Por exemplo: Eu tenho o bash como meu shell padrão, que eu uso para o meu Terminal App. Mas para meu aplicativo iTerm2, eu uso o comando como a janela se abre:
/bin/ksh
.Então, o meu
$0
me dá/bin/ksh
no iTerm2.$SHELL
me dá/bin/bash
no iTerm2.$0
,$SHELL
me dá/bin/bash
no Terminalfonte
bash
o terminal. Para voltar ao zsh, digitezsh
Para saber qual é o shell padrão para seu usuário, você pode executar:
Por exemplo, se você estiver usando o Bash, deverá obter a seguinte saída:
Se você não alterou nenhuma configuração, deve ser o Bash, já que o Bash é o shell padrão no Ubuntu.
fonte
/bin/sh
referência na minha resposta$$
variável é realmente definida pelo POSIX e funcionará na grande maioria dos shells. O peixe decidiu não seguir o padrão aqui, então acho justo ignorá-lo. Posso confirmar que$$
funciona como esperado em sh, dash, bash, zsh, ksh, ash, tcsh e csh. De fato, do alto da minha cabeça, não consigo pensar em nenhuma outra concha, exceto em peixes que não funcionam.As outras respostas tendem a usar recursos específicos do shell, mas estamos tentando descobrir qual shell estamos usando, portanto eles assumem a resposta para o problema. Por exemplo, nenhuma das respostas funcionará em peixes.
Em vez disso, use a sintaxe $$ em uma chamada de sh, mas estamos procurando o PPID, não o PID. Use o PPID para encontrar o cmd.
Obrigado pela melhoria @muru
fonte
ppid=
/cmd=
para omitir os cabeçalhos (e assim por diantetail -1
) e considere olhar/proc/.../exe
para ver qual arquivo está sendo executado (já que acmd
saída pode ser manipulada por qualquer que tenha sido o shell).O post original fez três perguntas. As respostas fornecidas abrangem a primeira pergunta: "Quando abro uma janela de terminal, qual shell é aberto por padrão?" Eles também respondem a uma pergunta que NÃO foi feita, a saber "Como posso descobrir qual shell está atualmente em execução no terminal?" No entanto, até onde eu vejo, ninguém respondeu à segunda ou à terceira pergunta originalmente feita, a saber "Como verifico quantas conchas estão instaladas?" e "Como altero o shell usado na minha conta?"
gato / etc / conchas
Por exemplo, em uma instalação padrão do Ubuntu 18.10, isso fornece:
# / etc / shells: shells de login válidos
/ bin / sh
/ bin / dash
/ bin / bash
/ bin / rbash
No entanto, por padrão, sh é um link simbólico para o dash, enquanto o rbash faz o link para o bash com a opção -r ("restrição do bash"), portanto, na verdade, existem apenas dois shells, e não quatro, como sugere a lista acima. O comando a seguir mostra se algum dos shells listados é de fato links simbólicos e, em caso afirmativo, para onde eles são vinculados: ls -l / bin
fonte