Debian - o bash é o shell padrão, mas o “man sh” dá um traço

3

No squeeze do Debian. A execução de ps -p $$ mostra bash é meu shell atual, ls -l $(which sh) mostra sh é um link simbólico para bash . Então, por que, quando eu executo man sh , recebo a página man de dash ? Isso é apenas um bug no Debian?

    
por ACK_stoverflow 01.05.2013 / 17:56

2 respostas

8

O shell padrão do sistema é diferente do shell do usuário. No meu sistema, dash é o padrão do sistema, mas eu uso bash quando efetuo login:

anthony@Zia:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar  1  2012 /bin/sh -> dash

Assim, um script de shell com #!/bin/sh up top é executado com traço.

Parece que seu sistema tem metade e meia, onde o link simbólico / bin / sh e manpage ficou fora de sincronia. O link simbólico do manpage no meu sistema é:

anthony@Zia:~$ ls -l /usr/share/man/man1/sh.1.gz 
lrwxrwxrwx 1 root root 9 Mar  1  2012 /usr/share/man/man1/sh.1.gz -> dash.1.gz

Se você alterou manualmente o / bin / sh, também terá que alterar esse. Possivelmente há um erro ao lidar com esses links simbólicos também; mpy aponta Bug # 662159 .

Cada usuário tem uma configuração para qual shell invocar no login. Essa é uma configuração por usuário, armazenada em /etc/passwd , portanto, a página do sistema em todo o sistema não pode refletir isso. Cada usuário pode alterar sua configuração de shell executando chsh (e, é claro, o root pode alterar as configurações de shell de outros usuários).

Há também uma variável de ambiente SHELL , que é definida no login, mas pode ser alterada. Geralmente, ele substitui o campo do shell em /etc/passwd para quando, por exemplo, xterm precisa iniciar um shell.

    
por 01.05.2013 / 18:05
1

TL; DR / bin / sh costumava ser um shell completamente diferente em outros UNIXes (Solaris) mas era Bash no Linux, mas o Debian decidiu ter um custom / bin / sh shell por vários motivos (principalmente tamanho do código).

O shell original era o shell Bourne. As regras POSIX exigem que um shell compatível com o Bourne seja instalado como / bin / sh. Isso é o que você obtém quando solicita man sh .

O shell Bourne na verdade era bem cru. Não tinha muitos recursos interativos que as pessoas queriam em um interpretador de comandos. não tinha mecanismo de histórico, sem pseudônimos, etc. Então, houve algumas adições feitas. Primeiro, isso veio em tcsh, depois em shell Korn e depois em Bash.

Quando você está fazendo uma distribuição Linux, você precisa seguir as regras POSIX para / bin / sh. Eles viram "Ei, temos Bash, que é compatível com shell shell Bourne". Por que não tiramos os poucos recursos e instalamos como / bin / sh? A maioria das distros fez isso.

Mas há alguns problemas com isso. O Bash tem muitos recursos (bindings readline, conclusão programável, arrays de dicionário, etc ...) e é realmente muito grande em memória, e tem algumas dependências de biblioteca. Isso não é particularmente bom quando você está no modo "meu sistema está em borked". Você se preocupa mais em obter seu sistema do que se preocupar se eu tiver um prompt totalmente programável nesse ponto.

Então, o pessoal do Debian voltou para o futuro, e tem um shell Bourne especializado e despojado como / bin / sh. É menor, menos dependências e, em teoria, pode ser mais confiável na inicialização. A desvantagem é que pode haver scripts de inicialização que dependiam de / bin / sh realmente sendo o Bash por baixo, e podem usar esses recursos. Mas esses são scripts que foram codificados fora da especificação e devem ser corrigidos.

    
por 01.05.2013 / 18:16