O que é shell padrão para o terminal?

51

Digamos, eu abri um terminal e digitei / executei alguns comandos do shell.

Mas não invoquei explicitamente o Bash ou qualquer outro shell.

Qual shell foi usado por padrão?

DrStrangeLove
fonte

Respostas:

51

O especificado na sua linha /etc/passwd(é uma :linha separada e o shell é o final).

Por exemplo o meu:

chris:x:1000:1000:Chris,,,:/home/chris:/bin/bash

Aqui está /bin/bash(o padrão do Ubuntu)

Você também pode usar chsh:

$ chsh
Password: 
Changing the login shell for chris
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]:

Isso está me dizendo que meu shell é /bin/bashe me deixa mudar isso.

Por fim, echo $SHELLfará o mesmo:

$ echo $SHELL
/bin/bash
Césio
fonte
se for bash, por que às vezes é chamado explicitamente como sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix"?
DrStrangeLove
Eu acho que isso é um mau comando pessoalmente - nada disso exige raiz. Se tivesse , seria melhor escrever como sudo netstat -an | grep LISTEN | grep -v ^unix. Não vejo razão para colocar isso em um subshell do bash.
Cesium
2
@DrStrangeLove: se mais de um comando no canal precisasse de permissões de root, sudo bash -c "..."garantiria que todo o canal fosse executado pela raiz.
Keith Thompson.
Se você não souber quais comandos requerem raiz (e por que), não os execute. Caso contrário, por que confiar em qualquer comando / programa / script mais do que o necessário. Se não puder commandA | sudo commandB | commandC, você pode fazer o sudo idprimeiro (executa o idcomando como root, mas também adquire um token " use sudo without prompt de senha " que dura (por padrão) 15 minutos.
waltinator
2
Se você usar chsh, deverá sair e fazer login novamente para ver esta alteração.
Neil Traft
17

GNU Bash é o shell usado por padrão nos terminais do Ubuntu. No entanto, quando os scripts são executados na inicialização do sistema, o traço é usado, pois é o traço que é / bin / sh.

Isso é definido na variável ambiental $ SHELL. Você pode verificar digitando echo $SHELLno terminal.

Anônimo
fonte
14

digitar o seguinte exibirá com qual shell o terminal foi aberto:

echo $SHELL

No entanto, para descobrir em que shell você está atualmente (você pode ter alterado), digite

ps -p $$

por exemplo, você verá que o shell é bash no exemplo de saída

  PID TTY          TIME CMD
 3500 pts/0    00:00:01 bash

Outro método é usar

echo $0

isso simplesmente retornará o nome do shell atual.

liberdade de expressão
fonte
+1 por simplicidadeecho $0
djthoms
Ótima resposta! Obrigado, por algum motivo, o echo $ SHELL não funcionou (sempre o usou) e suas duas alternativas funcionaram. Obrigado!
Wolfdawn
3

Por padrão, é bash:

env | grep ^SHELL=

Na maioria dos casos, produzirá

SHELL=/bin/bash
wojox
fonte
Não necessariamente. Se você criar um novo usuário com useradd, o padrão será sh. $ useradd -D|grep SHELL SHELL=/bin/sh.
Sparhawk
+1, porque, embora a resposta selecionada exija menos digitação, é sempre bom ter mais de uma maneira de fazer alguma coisa.
2

Para obter o caminho do arquivo do atual executável do shell, pode-se usar

readlink -f /proc/$$/exe

Algumas saídas possíveis são:

  • /bin/bash
  • /usr/bin/bash
  • /usr/bin/zsh
  • /home/stan/.linuxbrew/Cellar/zsh/5.2/bin/zsh
Victor Yarema
fonte