Eu usei o Cygwin no meu laptop (DOS). Eu tenho uma coleção de scripts dos meus colegas e dos meus. Eu não sou uma pessoa de TI, não conhecedor do Unix. Sigo a sintaxe dos meus colegas e sou capaz de gerenciar algumas coisas simples.
Os scripts funcionaram bem no meu laptop antigo. Acabei de trocar de laptop, instalei o Cygwin. Quando executo meus scripts, eles não funcionam. Aqui está um exemplo da mensagem de erro que recebo:
line 1: $':\r': command not found
line 5: syntax error near unexpected token `$'\r''
line 5: `fi
Aqui estão as 5 principais linhas do meu script
:
iter=1
if [ -f iter.txt ]
then rm ./iter.txt
fi
Alguém pode me explicar como resolver esse problema?
fonte
vim
pode fazer isso de duas maneiras, uma das quais usa palavras. Ou, melhor ainda, apontar para onde essa tarefa subordinada foi respondida repetidamente aqui com muito mais detalhes do que qualquer resposta nesta página, incluindo unix.stackexchange.com/questions/88811 apenas para iniciantes.vi -b
, de\r
qualquer maneira , são extensões do vim. não POSIX, não em nvi, elvis, Solaris vi ...Isso ocorre porque o script foi salvo por um editor que usa terminações de linha do DOS (como o Notepad ++, por exemplo). Você precisará removê-los dos seus scripts.
Para fazer isso, use
dos2unix
no arquivo de script ou(isso removerá todos os retornos de carro de qualquer lugar no script)
Quanto ao código no script:
Isso deve ser algo como
Isso remove o arquivo
1.txt
do diretório atual, se existir. O:
comando não faz nada (quase) e pode ser removido. Oiter
valor da variável deve ser usado como$iter
e entre aspas. E então possivelmente estou sendo mais explícito do que o necessário./
para dizer que o arquivo precisa ser encontrado no diretório atual.Se você está planejando para transformar isso em um loop (aqui, apagar todos os arquivos
1.txt
,2.txt
...,10.txt
):Ou, se nos sentirmos sorrateiros / preguiçosos,
em conchas que entendam a expansão da cinta.
fonte
Windows (CR LF)
e alterá-lo paraUnix (LF)
rm -f [1-9].txt 10.txt
. Mas isso não é totalmente logicamente equivalente, como se não há arquivos 1-9, mas não é um arquivo chamado literalmente[1-9].txt
, em seguida, ele será excluído. : DSeus scripts têm finais de linha incorretos. O Windows usa CR + LF (\ r \ n), o Unix usa LF (\ n) e o Classic MacOS usa CR (\ r). Você precisará alterar as terminações de linha em todos os arquivos afetados, com um editor de texto ou uma ferramenta independente
dos2unix
.O FTP e os sistemas de controle de versão, como o SVN, tendem a converter as terminações de linha de maneira apropriada; portanto, convém procurar essas opções para transferir arquivos no futuro.
Se esses arquivos não estiverem sendo transferidos, mas apenas usados em uma única máquina, você encontrará as configurações das terminações de linha no seu editor de texto preferido. A maioria dos anunciados como "para programadores" terá essa opção.
fonte
Como resposta complementar, deixe-me adicionar algumas notas / dicas ...
Primeiro, para arquivos de texto comuns, é possível determinar facilmente se eles têm final de linha Unix ou DOS usando o
file
comando Por exemplo:Observe meu uso de
dos2unix
. Eu recomendo que você o instale. Dependendo de como você usa o Cygwin, pode ser necessário fazer essa conversão com frequência suficiente para que a conveniência seja bem-vinda. Mais importante ainda, não há chance de erro como você obtém nas edições manuais discutidas aqui.Para instalar, inicie o executável principal do Cygwin. Esse é aquele com o nome de setup-x86_64.exe ou algo do tipo. Certifique-se de ver uma tela como esta:
Como você já fez a instalação principal, poderá clicar em Avançar até obter a tela de seleção. Selecione Completo na lista suspensa e digite "dos2" na caixa de pesquisa e escolha a ferramenta como mostrado aqui:
Em seguida, clique em Avançar novamente e deixe a instalação concluída. É isso aí. Diverta-se. Cygwin, com exceção desse inconveniente ocasional, é um pacote incrível.
fonte
Se não o dos2unix, também há 'flip'
$ flip -u yourfilename.txt
irá alternar para o uso de terminações de linha unix.
fonte
Eu uso o Notepad ++ para editar meus scripts bash (.sh) conectando ao servidor pelo WinSCP
(para configurar o editor WinSCP para o Notepad ++: https://winscp.net/eng/docs/ui_editor_preferences )
Isso é muito prático para abrir arquivos dos servidores para editar / salvar em vez do editor " Vim ".
Quando você abre o arquivo no Notepad ++ , clique duas vezes na 7ª coluna na barra de status na parte inferior e selecione " Unix (LF) ".
Além disso, você deve alterar o 8º por Codificação -> Codificar em UTF-8 na barra superior.
fonte
Você não precisa alterar a codificação de linha do arquivo real para que o Bash do Cygwin funcione alegremente com as codificações de fim de linha do Mac e do Windows. Há uma opção que você só precisa ativar.
Basta atualizar o seu
~/.bash_profile
para que ele contenhaConsulte https://ptolemy.berkeley.edu/projects/chess/softdevel/faq/5.html
fonte