2012-07-20 5 views
1

여기에 나와있는 내용이 있습니다. Win7 환경에 cygwin이 설치되어 있습니다.bash, 실행 파일은 명령 줄에서 실행되지만, 스크립트에서는 실행되지 않습니다.

파일 mpc.exe 인텔 포트란 컴파일러에 의해 생성 된 64 비트 실행

cp ./dir1/dir2/mpc.exe ./mpc.exe 
./mpc.exe arg1 arg2 

모든 것이 잘된다, 이것은 내가 명령 줄에서하는 일의 순서이며, 모든 작동

그것을위한 스크립트를 만들고 싶습니다. 그 이유는 arg2의 다양한 값에 대한 코드를 실행하기를 원할 것입니다.

./script_mpc.sh: line 2: ./mpc.exe: No such file or directory 

매우 신선한 초급 :

$>chmod +x script_mpc.sh 
$>./script_mpc.sh 

오류, 이제 다시 명령 줄에서, 다음을 포함

#!/bin/sh 
cp ./dir1/dir2/mpc.exe ./mpc.exe 
./mpc.exe arg1 arg2 
wait 
return_val=$? 
[ $retval -eq 0 ] && echo "successfully executed " 

을 "script_mpc.sh을"파일. 이동 중에도 셸 명령 및 스크립팅을 배우십시오. 도와주세요.

+0

이것이 bash 스크립트라고 기대한다면'#!/bin/sh'이 아니라'#!/bin/sh'이 아니라'#!/bin/bash'가 필요합니다. 파일의 이름은'.sh'로 지정되므로 어쩌면 질문에서 bash를 의미하지는 않을 것입니다. – Almo

+0

스크립트가 현재 디렉토리에 대해 mpc.exe를 성공적으로 복사 했습니까? 'cp' 명령에서 mpc.exe 소스에 대한 전체 경로를 지정하십시오. – rush

+0

@Almo : 답장을 보내 주셔서 감사합니다. 머리글에서 sh 대신 bash를 실험했습니다. 거기에 큰 차이를 만들지 않습니다. 같은 오류. –

답변

1

Cygwin을 사용 중입니다.

는 그이 줄을 내기 할 것이다 :

cp ./dir1/dir2/mpc.exe ./mpc.exe 

가 끝나는 Windows 스타일의 CR-LF 라인을 가지고있다. 쉘 (sh 또는 bash)은 CR을 파일 이름의 일부로 해석하여 파일을 "./mpc.exe\r"에 복사합니다.

dos2unix을 통해 스크립트를 필터링하십시오. 맨 페이지를 먼저 읽으십시오. 대부분의 텍스트 필터와 달리 일반적으로 입력 파일을 덮어 씁니다.

배경

:

유닉스 텍스트 파일에서 줄의 끝을 표시하는 하나의 ASCII의 LF 문자를 사용합니다. Windows는 CR-LF 쌍을 사용합니다. Cygwin은 Windows의 유닉스 계열 에뮬레이션 레이어이므로 충돌하는 end-of-line 표현에 대한 많은 문제를 일으키는 경향이 있습니다.

유닉스 쉘은 일반적으로 라인 끝 표시기의 일부로 CR을 인식하지 못합니다. 대신, 파일을 어떻게 보느냐에 따라 보이지 않는 경향이있는 다른 문자로 취급합니다.

아마도 LF와 CR-LF 줄 끝이 혼합되어있을 것입니다. 일관되게 CR-LF 결말을 사용한 경우 #!/bin/sh 또는 #!/bin/bash 행이 인식되지 않습니다.

가능하면 유닉스 스타일 편집기 (vim, emacs, nano 등) 만 사용하여 쉘 스크립트를 편집하십시오. 메모장이나 워드 패드를 사용하여 스크립트를 만들면 이런 종류의 문제가 발생할 가능성이 있습니다.

+0

나는 거기에서 황소의 눈을 맞았다 고 생각합니다. 나는 Windows 기반 텍스트 편집기를 사용하여 스크립트를 만들었습니다. 초보이기 때문에 나는 리눅스 시스템을위한이 미묘한 포맷들을 마스터하기 전까지는 쉬운 방법을 생각했다. 그게 효과가 있다고 생각합니다. 다시 한번 감사드립니다. –

+0

@ user1538324 : 당신이 여기 새로 왔음을 안다. 환영! 주의해야 할 몇 가지 사항 : 답변이나 질문을 좋아하거나 싫어하는 경우 제목 옆에있는 화살표 중 하나를 클릭하여 upvote 또는 downvote 할 수 있습니다. 이것은 모든 게시물에 적용됩니다. 답변이 실제로 귀하의 질문에 대한 답변 인 경우 체크 표시를 클릭하여 정답으로 수락 할 수 있습니다. 자신에게 물어 본 질문에만이 작업을 수행 할 수 있습니다. 몇 가지 평판 포인트를 얻을 때까지 몇 가지 제한이있을 수 있습니다. –

관련 문제