Os scripts de shell são sensíveis à codificação e às terminações de linha?
Estou criando um aplicativo NW.js. no Mac e quero executá-lo no modo dev clicando duas vezes em um ícone. Primeiro passo, estou tentando fazer meu script de shell funcionar.
Usando o VSCode no Windows (eu queria ganhar tempo), criei umrun-nw
arquivo na raiz do meu projeto, contendo este:
#!/bin/bash
cd "src"
npm install
cd ..
./tools/nwjs-sdk-v0.17.3-osx-x64/nwjs.app/Contents/MacOS/nwjs "src" &
mas eu recebo esta saída:
$ sh ./run-nw
: command not found
: No such file or directory
: command not found
: No such file or directory
Usage: npm <command>
where <command> is one of: (snip commands list)
(snip npm help)
[email protected] /usr/local/lib/node_modules/npm
: command not found
: No such file or directory
: command not found
Eu realmente não entendo:
parece que leva linhas vazias como comandos. No meu editor (VSCode), tentei substituir\r\n
com\n
(caso o\r
cria problemas), mas nada muda.parece que não encontra as pastas (com ou sem odirname
instruções) ou talvez não conheça ocd
comando?parece que não entende oinstall
argumento paranpm
a parte que realmente me impressiona é que ele ainda executa o aplicativo (se eu fizesse umnpm install
manualmente) ...Não consegui fazê-lo funcionar corretamente e, suspeitando de algo estranho com o próprio arquivo, criei um novo diretamente no Mac, usando o vim desta vez. Digitei exatamente as mesmas instruções e ... agora funciona sem nenhum problema.
Uma diferença nos dois arquivos revela exatamente zero diferença.
Qual pode ser a diferença? O que pode fazer o primeiro script não funcionar? Como posso descobrir?
AtualizarSeguindo as recomendações da resposta aceita, depois que as terminações de linhas erradas voltaram, verifiquei várias coisas. Acontece que desde que eu copiei meu~/.gitconfig
da minha máquina Windows, eu tinhaautocrlf=true
, portanto, toda vez que modifiquei o arquivo bash no Windows, ele redefiniu as terminações da linha como\r\n
.
Portanto, além de executar o dos2unix (que você precisará instalar usando o Homebrew no mac), se estiver usando o Git, verifique sua configuração.