Eu sou novo no uso do Cygwin, então peço desculpas se esta for uma pergunta muito recente.
Eu tenho um script bash onde eu "cd" para um diretório e faço 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 do CD diretamente no prompt do shell, 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.
Respostas:
Que tipo de final de linha o seu script possui? Para que o script bash do Cygwin funcione corretamente (sem precisar definir opções especiais), ele deve ter terminações de linha Unix (LF) em vez de terminações de linha DOS (CR-LF). Se você salvou o script com as terminações de linha do DOS, o bash verá seu argumento
cd
como/c/Code/Project^M
, onde^M
é um CR, e não encontrará um diretório com esse nome.Para ver que tipo de final de linha ela possui, você pode executar
file scriptname
onde scriptname é o nome do seu script. Para converter o script para que ele tenha finais de linha Unix, executed2u scriptname
.Não use o Bloco de notas para editar os scripts do Cygwin bash. Ele sempre salva arquivos com terminações de linha do DOS.
fonte
:help ff
e:help ffs
.A menos que você substitua, um script é executado em sua própria cópia do shell (geralmente Bash). Então, quando o script termina, a instância do bash também sai. Assim, os CDs do seu script são inseridos em um novo diretório e, em seguida, são encerrados, retornando ao Bash original - que nunca foi lançado.
Duas maneiras de contornar isso. Você pode usar um alias em vez de um script, por exemplo, no seu .profile
Outra maneira é dizer ao Bash para não gerar um subshell usando a sintaxe "ponto"
fonte
Você pode encontrar seus arquivos em / cygdrive / c ...
fonte
Experimentar:
cd /cygdrive/c/code/blah/blah
fonte
'cd c:/code/blah/blah
'não para'cd /c/code/blah/blah
'. Além disso, oc:
formulário ' ' também funciona a partir de um script; Algo está faltando aqui, a questão precisa de mais elaboração.Não tenho reputação de comentar ou votar, mas a resposta de CarlF me ajudou.
"Então, seus CDs de script são inseridos em um novo diretório e, em seguida, saem, retornando ao Bash original - que nunca foi lançado."
Mesmo script, mas no meu caso, nenhuma mensagem de erro.
Isso funcionou para mim:
. myscript.sh
fonte