Jestem nowy w używaniu Cygwin, więc przepraszam, jeśli jest to bardzo początkujące pytanie.
Mam skrypt bash, w którym „cd” do katalogu, a następnie zrobić coś w tym katalogu. Jednak polecenie cd kończy się niepowodzeniem z komunikatem „Brak takiego pliku lub katalogu / c / code / blah / blah”.
Jeśli skopiuję linię cd bezpośrednio do zachęty powłoki, to działa dobrze. Po prostu zawodzi w skrypcie.
[edytuj] Zgodnie z prośbą dodałem rzeczywiste wiersze ze skryptu:
#!/bin/bash
cd /c/Code/Project
Dziękuję za pomoc,
Dan.
Odpowiedzi:
Jakie zakończenia linii ma twój skrypt? Aby skrypt bash Cygwin działał poprawnie (bez konieczności ustawiania specjalnych opcji), musi mieć końcówki linii uniksowej (LF) zamiast końców linii DOS (CR-LF). Jeśli zapisałeś skrypt z zakończeniami linii DOS, bash zobaczy twój argument
cd
jako as/c/Code/Project^M
, gdzie^M
jest CR i nie znajdzie katalogu o tej nazwie.Aby sprawdzić, jaki rodzaj zakończeń linii ma, można wykonać
file scriptname
, gdzie scriptname to nazwa skryptu. Aby przekonwertować skrypt w taki sposób, aby zawierał końcówki linii uniksowych, uruchomd2u scriptname
.Nie używaj Notatnika do edycji skryptów bash Cygwin. Zawsze zapisuje pliki z zakończeniami linii DOS.
źródło
:help ff
i:help ffs
.O ile nie przesłonisz, skrypt wykonuje się we własnej kopii powłoki (zwykle Bash). Następnie, gdy skrypt kończy działanie, kończy się również wystąpienie bash. Więc twoje skrypty CD do nowego katalogu, a następnie zamykają się, wracając do oryginalnego Bash - który nigdy nie zrobił CD.
Dwa sposoby obejścia tego. Możesz użyć aliasu zamiast skryptu, np. W .profile
Innym sposobem jest powiedzenie Bashowi, aby nie tworzył podpowłoki przy użyciu składni „kropka”
źródło
Możesz znaleźć swoje pliki w / cygdrive / c ...
źródło
Próbować:
cd /cygdrive/c/code/blah/blah
źródło
'cd c:/code/blah/blah
„nie dla'cd /c/code/blah/blah
”. Również formularz „c:
” działa również ze skryptu; Czegoś tu brakuje, pytanie wymaga dalszego dopracowania.Nie mam reputacji, aby komentować lub głosować, ale odpowiedź CarlFa pomogła mi.
„Więc twoje skrypty CD do nowego katalogu, a następnie wychodzą, powracając do oryginalnej wersji Bash - która nigdy nie zrobiła płyty CD”
Ten sam skrypt, ale w moim przypadku nie ma komunikatu o błędzie.
To działało dla mnie:
. myscript.sh
źródło