': não é um identificador válido para leitura

': não é um identificador válido para leitura

Eu uso o Notepad++ e digito:

    read s
    echo "$s"

A saída é:

<code>': não é um identificador válido</code>

E então tento colocar ponto e vírgula:

read s;
echo "$s"

e a saída é:

insira a descrição da imagem aqui

Salvei o arquivo como q.she executo com o cygwin, mas ainda não consigo usar reado operador, então estou ficando confuso. Eu tentei outros editores como vitambé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.shse 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.

informação relacionada