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

1

Eu uso o Notepad ++ e digito:

    read s
    echo "$s"

A saída é:

Eentãoeutentocolocarpontoevírgula:

reads;echo"$s"

e a saída é:

Salvei o arquivo como q.sh e corri com o cygwin, mas ainda não consigo usar o operador read , então estou ficando confuso. Eu tentei outros editores como vi também, mas a saída é a mesma.

O que está errado? Como fazer isso funcionar?

    
por Jan Nutcha 26.08.2017 / 22:15

1 resposta

1

O arquivo de texto que constitui o script de shell foi escrito no Notepad ++. Este editor salva arquivos como arquivos de texto DOS por padrão que, do ponto de vista Unix, tem 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 script tem falta uma #! -line (como apontado nos comentários), mas contanto que você o execute com um intérprete explícito ( sh q.sh ), isso não é necessário.

Adicionando a linha

#!/bin/sh

iria (depois de chmod +x q.sh ) fazer a execução como ./q.sh se comporta exatamente da mesma forma que executá-lo com sh q.sh .

    
por 01.09.2017 / 22:35