Execute o shell script nas janelas usando o Cygwin

4

Estou com problemas para executar o script .sh no Windows usando o Cygwin.

Quando eu corro o arquivo: ./build.sh -s srv.txt estou recebendo:./build.sh: line 1: #!/bin/bash: No such file or directory

Vocês podem me ajudar, o que isso significa? A 1ª linha é comentada :)

obrigado.

elbek
fonte
É bash em /bin? É executável (chmod + x / bin / bash)?
zero2cx
Eu fiz isso, sim, que o bash está dando/usr/bin/bash
elbek

Respostas:

4

Eu tive o mesmo problema executando cygwin no windows. Para mim, não tinha nada a ver com o caminho.

Tinha tudo a ver com a codificação. Eu estava usando UTF-8com o BOM (Byte Order Mark) . O BOM estava causando um estrangulamento. Uma vez que eu removi, funcionou perfeitamente.

Eu atualizei a codificação usando o Notepad ++ por:

Codificação -> Encode em UTF-8 sem BOM

O which bashcomando foi emitido:

/usr/bin/bash

No entanto, ainda foi capaz de resolver

#!/bin/bash
Ryan Gates
fonte
3

Geralmente, significa que há um ^M(retorno de carro) no final de cada linha do seu arquivo ou algum outro problema de codificação que impede que a #!/bin/bashlinha seja interpretada corretamente.

Faça uma cópia do arquivo e salve-o como ASCII simples usando um editor de sua escolha para remover o máximo possível de codificação não-ASCII. Além disso, tente salvá-lo no formato 'UNIX' se o editor o suportar.

EightBitTony
fonte
O que é vim? Eu tenho o notepad ++, estou no windows.
elbek 05 de
vim é um editor de arquivos unix, se o arquivo não for executado sob o Cygwin, a melhor aposta é descobrir por que sob o Cygwin. O problema é que você está salvando um arquivo do Windows (que tem retornos de carro e alimentações de linha) e tenta executá-lo no Cygwin. Se puder, diga ao Notepad ++ para salvar no formato 'unix'.
EightBitTony
Eu fiz isso, há uma opção para torná-lo formato UNIX e eu fiz isso usando o notepad + +
elbek
Você pode pelo menos tentar o que eu sugiro? Edite-o no vim (em seu tipo de shell Cygwin, vim build.sh) e digite o que eu disse, e veja se os símbolos ^ M aparecem no final de cada linha.
EightBitTony
1
Use isto para ver se você tem os finais de linha apropriados: <pre> od -c </ pre> Este comando mostra exatamente quais caracteres estão presentes.
UtahJarhead
2

Você já tentou correr ...

sh build.sh

Ao invés de...

./build.sh

Eu não tenho certeza (eu nunca rodei o Cygwin) mas parece que /bin/bashnão é um caminho na sua máquina, então o seu shebang ( #!/bin/bash) explode o programa.

Se você executar o programa usando sho shebang deve ser tratado como um comentário.

Espero que isto ajude.

Fábio Santos
fonte
1

#!/bin/bash(chamado shebang, abreviação de Crash ( #) Bang ( !), diz ao shell qual programa usar para executar o script em questão.Você verá isso com perl scripts ( #!/usr/bin/perl), Python ( #!/usr/bin/python) ou php ( #!/usr/bin/php) também.

Na sua situação, algumas coisas podem estar causando isso. O shell 'bash' não está instalado ou o script está em um formato não reconhecido que você não pode ver.

Primeiro, existe bash? Nos dê os resultados disso: ls -l /bin/bash

Em segundo lugar, o que está no script? Nos dê as 2 primeiras linhas deste: od -c build.sh O que estamos procurando é o script estar no formato errado. O Windows gosta CRLF'ou \r\npara uma linha que termina enquanto o Linux só gosta LFou \n(veja também: http://en.wikipedia.org/wiki/Newline )

Para ser honesto, não sei se o CYGWIN gosta de finais de linha do Windows ou Linux, mas essa é uma causa muito provável para o seu problema.

Novamente, nos dê a saída od -c build.she vamos ver o que está acontecendo.

UtahJarhead
fonte
0

No passado eu tive problemas / M em scripts python escritos em uma caixa do Windows e tentando usá-los em uma caixa linux. Eu usei o dos2unix para converter os arquivos para torná-los operáveis ​​na caixa linux. Se o carro retornar (ou outros problemas de formatação de texto do Windows) existir e for a causa do problema, isso pode ajudar.

CodeBandit
fonte