Questão Execute o shell script nas janelas usando o Cygwin


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

Quando eu corro o arquivo: ./build.sh -s srv.txt Estou obtendo: ./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.


4


origem


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


Respostas:


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-8 com o BOM (marca de ordem de byte). O BOM estava causando um estrangulamento. Depois que eu o removi, funcionou perfeitamente.

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

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

o which bash comando emitido:

/usr/bin/bash

No entanto, ainda foi capaz de resolver

#!/bin/bash

4





Isso geralmente significa que há ^M (retorno de carro) no final de cada linha do arquivo ou outro problema de codificação que impeça a #!/bin/bash linha sendo 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 de codificação não-ASCII possível. Além disso, tente salvá-lo no formato 'UNIX' se o editor o suportar.


3



O que é vim? Eu tenho o notepad ++, estou no windows. - elbek
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 linefeeds) e tentando executá-lo no Cygwin. Se você 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
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


Você já tentou correr ...

sh build.sh

Ao invés de...

./build.sh

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

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

Espero que isto ajude.


2





#!/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 scripts perl (#!/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. Gostos do Windows CRLF'ou \r\n para uma linha que termina enquanto o Linux só gosta LF ou \n (Veja também: http://en.wikipedia.org/wiki/Newline)

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

Mais uma vez, nos dê a saída de od -c build.sh e vamos ver o que está acontecendo.


1





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.


0