Tenho usado bash
a maior parte do tempo e acabei de começar a brincar com outras conchas. Comecei dash
e tento descobrir o número da versão, mas o método usual gosta -v
ou $version
não funciona. Eu posso entender que --version
não vai funcionar, pois é específico do GNU. Pesquisei na net e encontrei as seguintes respostas, todas recorrendo ao sistema de gestão de pacotes.
Como saber o número da versão do traço? (o usuário está usando o CentOS, então a resposta depende do sistema Redhat Package Management)
e
Como encontrar a versão do shell traço no Ubuntu bin? (Isto é do site AskUbuntu, então a resposta depende da Advanced Package Tool)
Então, existe uma maneira de descobrir a versão dash
sem recorrer ao sistema de gerenciamento de pacotes? Ficarei muito surpreso se não houver uma maneira simples, porque sempre acreditei que consultar a versão de um software é uma das funções mais fundamentais. Se esse for realmente o caso, ficaria feliz em ouvir alguma explicação, por exemplo, qual é a filosofia por trás desse design. Ficarei feliz em aceitar uma maneira simples de obter a dash
versão sem recorrer ao sistema de gerenciamento de pacotes ou uma explicação convincente (perspectiva histórica também OK) sobre por que não posso fazer isso como a resposta aceita.
Não é. É uma boa ideia que tivemos que aprender.
Muitos anos atrás, não tínhamos um kernel, um gerenciador de pacotes e um repositório de pacotes. Temos um sistema operacional . Isso tinha uma versão e, implicitamente, todos os programas componentes do sistema operacional estavam associados à versão do sistema operacional. Isso era tão verdadeiro para o BSD quanto para o PC-DOS.
O mundo da AT&T no início da década de 1980 nos deu o
what
programa e a ideia de cadeias de versão incorporadas colocadas em binários pelo sistema de controle de código-fonte. Por um tempo, era possível usar isso para descobrir as versões das coisas, embora muitas vezes fossem as versões de arquivos de origem individuais em um programa, e não para o programa como um todo. (Eu mesmo coloquei esse mecanismo em todos os meus utilitários de linha de comando versão 1 para DOS e para OS/2, juntamente com um programa de 16 bitsWHAT
.)Pode-se ainda hoje com alguns OpenBSD…
… e binários do FreeBSD … … mas este não é mais o caso com a maioria dos outros programas no OpenBSD e FreeBSD, e certamente não com o shell Almquist no FreeBSD … … nem com o shell Debian Almquist.Em 1988, a Digital Research deu ao mundo a ideia de que as ferramentas tinham a
/?
opção de pedir ajuda, que a Microsoft copiou do DR-DOS para a versão 5.0 de seu MS-DOS em 1991 e da IBM para o OS/2 em 1992. Essa ideia, amplamente divulgado de boca em boca, no Fidonet e em revistas de informática na época como uma coisa muito boa, encontrou seu caminho nas convenções de codificação GNU como uma--help
opção, à qual foi adicionada uma--version
opção. Mas isso não era comum para ferramentas não-GNU no mundo Unix, nem mesmo na época em que o shell Almquist foi escrito em 1989; já que a convenção GNU nem apareceu até a década de 1990.Atualmente, o shell Bourne Again (publicado pela primeira vez em 1989) suporta
--version
. Isso também foi adicionado ao shell MirBSD Korn (o shell Korn original foi publicado pela primeira vez em 1983, lembre-se), o shell TENEX C (1983) e o shell Z (1990) que também hoje em dia suportam--version
. Este mecanismo, no entanto, não foi adicionado ao shell Almquist, mesmo pelo pessoal do Debian quando eles fizeram seu shell Debian Almquist décadas depois.De dentro dos próprios shells, muitos shells (incluindo várias das variantes Korn, o shell Z, o shell Bourne Again e o shell TENEX C) têm uma variável
shellname_VERSION
ouversion
shell que pode ser acessada no script de shell. Mais uma vez, a concha Almquist não.Leitura adicional
DASH_VERSION
variável . Erro #764172 do Debian.Use
file
como solução alternativa.file $(which dash)
:/usr/bin/dash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=812a16ad1517b3d714e7b3bdb5470b2c82eb25ff, for GNU/Linux 3.2.0, stripped