Cygwin - bash 스크립트의 cd


12

나는 Cygwin을 처음 사용하기 때문에 매우 안타까운 질문이다.

나는 bash 스크립트를 가지고 디렉토리에 "cd"하고 그 디렉토리에서 뭔가를한다. 그러나 cd 명령은 "No such file or directory / c / code / blah / blah"와 함께 실패합니다.

쉘 프롬프트에 직접 CD 라인을 복사하면 제대로 작동합니다. 그것은 단지 스크립트에서 실패합니다.

[편집] 요청에 따라 스크립트의 실제 줄을 추가했습니다.

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

어떤 도움을 주셔서 감사합니다.
단.


1
스크립트에서 실제 라인을 게시 할 수 있습니까?
Dennis Williamson

답변:


18

스크립트의 라인 엔딩은 어떤 종류입니까? Cygwin bash 스크립트가 (특수 옵션을 설정하지 않고) 제대로 작동하려면 DOS 라인 끝 (CR-LF) 대신 Unix 라인 끝 (LF)이 있어야합니다. 도스 라인 결말로 스크립트를 저장했다면, bash는 cd 같이 /c/Code/Project^M, 어디서 ^M CR이고, 그 이름으로 디렉토리를 찾지 못할 것입니다.

어떤 라인 엔딩이 있는지 보려면, file scriptname, 어디서 스크립트 이름 스크립트의 이름입니다. Unix 줄 끝이 있도록 스크립트를 변환하려면 다음을 실행하십시오. d2u scriptname.

메모장을 사용하여 Cygwin bash 스크립트를 편집하지 마십시오. 그것은 항상 DOS 줄 끝과 함께 파일을 저장합니다.


아하! 그거였다. Vim을 사용하여 편집하고있었습니다. 고맙습니다 :-)
Dan

Vim은 정상적으로 작동합니다. 파일이 Unix 또는 DOS 줄 끝이 있는지 여부를 자동으로 감지하여 같은 방식으로 저장합니다. 기본적으로 Cygwin의 vim은 Unix 줄 끝이있는 새 파일을 만들지 만 Windows의 gvim은 DOS 줄 끝이있는 새 파일을 만듭니다. 너는 그걸 바꿀 수있어. 만나다 :help ff:help ffs.
garyjohn

Emacs는 또한 CR-LF로 저장하고있었습니다. 에디터에서 줄 끝 스타일 바꾸기 : emacswiki.org/emacs/EndOfLineTips
jfklein

2

오버라이드하지 않는 한, 스크립트는 자체 쉘 (보통 Bash)의 복사본에서 실행됩니다. 그런 다음 스크립트가 종료되면 bash의 해당 인스턴스도 종료됩니다. 그래서 스크립트 CD를 새로운 디렉토리에 넣은 다음 종료하여 원래의 Bash로 되돌려줍니다.

두 가지 방법으로 해결할 수 있습니다. 스크립트 대신 별칭을 사용할 수 있습니다 (예 : .profile에 있습니다.

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

또 다른 방법은 Bash에게 "dot"구문을 사용하여 서브 쉘을 생성하지 않도록 지시하는 것입니다

. myscript

내 질문을 잘못 읽었 군. 내가 묻는 오류 메시지는 스크립트 내에서 cd ​​명령으로 stdout에 기록됩니다. 스크립트가 종료되면 현재 디렉토리가 변경되도록 요청하지 않습니다.
Dan

나는 OP와 비슷한 문제를 가지고 있었지만 오류는 없었다. 이 답변은 "주제가 100 %"가 아니더라도 많은 도움이되었습니다.
Frosty Z


1

시험:

cd / cygdrive / c / code / blah / blah


그게 효과가있을거야. 'cd c:/code/blah/blah '에 대한 'cd /c/code/blah/blah '. 또한 ' c: '형식은 스크립트에서도 작동합니다. 뭔가 다른 것이 여기에 빠져 있습니다. 질문에 더 정교함이 필요합니다.
nik

이것은 작동하지 않았다.
Dan

@nik the c : form도 작동하지 않았습니다. 내가 시도하는 것은 스크립트에서 작동하지 않습니다. 그들은 모두 커맨드 라인에서 작동합니다.
Dan

1

나는 논평이나 표결에 대한 명성이 없지만 CarlF의 대답은 나를 도왔다.

"그래서 스크립트 CD를 새로운 디렉토리에 넣은 다음 종료하고 원래의 Bash로 되돌려줍니다.

같은 스크립트지만, 제 경우에는 오류 메시지가 없습니다.

이것은 나를 위해 일했다 :

. myscript.sh

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.