Cygwin - cd no script bash

12

Eu sou novo em usar o Cygwin, então peço desculpas se esta é uma pergunta muito novata.

Eu tenho um script bash onde eu "cd" para um diretório, em seguida, fazer algo nesse diretório. No entanto, o comando cd falha com "Nenhum arquivo ou diretório / c / code / blah / blah".

Se eu copiar a linha de cd diretamente no prompt do shell, ela funcionará bem. Apenas falha no script.

[edit] Conforme solicitado, adicionei as linhas reais do script:

#!/bin/bash
cd /c/Code/Project

Obrigado por qualquer ajuda com isso,
Dan.

    
por Dan 16.09.2010 / 11:01

5 respostas

17

Que tipo de final de linha seu script possui? Para que o script bash do Cygwin funcione corretamente (sem ter que definir opções especiais), ele deve ter finais de linha (LF) do Unix em vez de finais de linha do DOS (CR-LF). Se você salvou o script com finais de linha do DOS, o bash verá seu argumento para cd as /c/Code/Project^M , onde ^M é um CR e não encontrará um diretório com esse nome.

Para ver que tipo de finalização de linha ele possui, você pode executar file scriptname , onde scriptname é o nome do seu script. Para converter o script de modo que tenha finais de linha Unix, execute d2u scriptname .

Não use o Bloco de Notas para editar os scripts de bash do Cygwin. Ele sempre salva arquivos com finais de linha do DOS.

    
por 16.09.2010 / 17:22
2

A menos que você sobrescreva, um script é executado em sua própria cópia do shell (geralmente Bash). Então, quando o script sair, essa instância do bash também será encerrada. Então, os CDs do seu script entram em um novo diretório e saem, retornando ao Bash original - que nunca fez um CD.

Duas maneiras de contornar isso. Você pode usar um alias em vez de um script, por exemplo no seu .profile tem

alias mycd="cd /c/Code/Project"

Outra maneira é dizer ao Bash para não gerar um subshell usando a sintaxe "dot"

. myscript
    
por 16.09.2010 / 15:08
2

Você pode encontrar seus arquivos em / cygdrive / c ...

    
por 29.04.2011 / 05:32
1

Tente:

cd /cygdrive/c/code/blah/blah

    
por 16.09.2010 / 11:43
1

Eu não tenho reputação para comentar ou votar, mas a resposta de CarlF me ajudou.

"Então, o seu script faz o CD em um novo diretório e sai, retornando ao Bash original - que nunca fez um CD."

O mesmo script, mas no meu caso, nenhuma mensagem de erro.

Isso funcionou para mim:

myscript.sh

    
por 29.04.2011 / 05:12

Tags