paulo1205
(usa Ubuntu)
Enviado em 12/10/2022 - 04:29h
Uma ressalva sobre a resposta do nosso colega msoliver, acima: ela supõe que o
script será executado com o Bash, e por isso usa as opções
-u e
-p do comando interno
read da forma que usa.
Sendo esse o caso, eu acho bom explicitar que a solução apresentada é específica para o Bash, e lembrar que, ao contrário de distribuições baseadas em Red Hat (RHEL, CentOS, Fedora etc.), nas quais
sh é sinônimo de
bash, em várias outras distribuições ou versões de Unix o
sh é sinônimo de
ash (alguns BSDs),
dash (Debian, Ubuntu e similares),
ksh (versão de 1988),
ksh93,
pdksh ou mesmo outras opções.
Fora o fato de haver diferentes
defaults para
/bin/sh em diferentes sistemas e distribuições, o próprio
script pode, por diferentes razões, explicitamente preferir usar outro
shell. Por exemplo, se alguém quiser fazer contas com números em ponto flutuante, provavelmente vai usar o
ksh93 (pois nem mesmo Bash, com todo o seu tamanho, tem aritmética de ponto flutuante embutida), ou num sistema com muita restrição de memória pode-se querer usar
ash ou
dash, que têm menos de um décimo do tamanho do Bash.
Ciente disso, eis algumas das diferenças que podem se manifestar nesse caso específico:
• no
ash e
dash, o comando
read não possui a opção
-u, de modo que a leitura na linha de controle do
while provavelmente teria de ter a forma “
read LINHA <&3” (que é menos eficiente, por sinal, mas é o único meio de fazer nesses
shells);
• no
ksh,
ksh93 e
pdksh, a opção
-p existe mas tem um sentido completamente diferente e não recebe argumento, servindo para redirecionar a leitura a partir de um co-processo que tenha sido anteriormente iniciado, de modo que seria necessário primeiro exibir o
prompt que informa o nome do aluno cuja matrícula deve ser digitada por meio de um comando
echo (ou
print, já que é um
ksh), e depois fazer a leitura num comando
read.
... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)