Eu uso o Notepad++ e digito:
read s
echo "$s"
A saída é:
E então tento colocar ponto e vírgula:
read s;
echo "$s"
e a saída é:
Salvei o arquivo como q.sh
e executo com o cygwin, mas ainda não consigo usar read
o operador, então estou ficando confuso. Eu tentei outros editores como vi
também, mas o resultado é o mesmo.
O que está errado? Como fazer dar certo?
Responder1
O arquivo de texto que constitui o shell script foi escrito em Notepad++. Este editor salva arquivos como arquivos de texto DOS por padrão que, do ponto de vista Unix, possui um retorno de carro supérfluo ( \r
) no final de cada linha. Isso confunde sh
.
Para removê-lo:
$ tr -d '\r' <q.sh >q-new.sh
$ mv q-new.sh q.sh
O roteirofazfalta um #!
-line (como apontado nos comentários), mas contanto que você o execute com um interpretador explícito ( sh q.sh
), isso não é necessário.
Adicionando a linha
#!/bin/sh
faria (depois chmod +x q.sh
) executá-lo como ./q.sh
se comportar exatamente da mesma forma que executá-lo com sh q.sh
.
Responder2
Outra forma de converter o retorno de carro para Unix, se você tiver acesso ao Notepad++. No Bloco de Notas, vá em: Editar -> Conversão EOL -> Unix (LF)
Em francês, é: Edição -> Convertir les sauts de ligne -> Converti au format Unix (LF)
Pode ser mais rápido.