2012-09-11 3 views
1

나는 학생이고 이것은 bash 스크립팅에 대한 첫 번째 노출이며, c를위한 간단한 Makefile을 사용하고있다.리눅스 터미널이 bash 스크립트에 걸려있다.

#!/usr/bin/sh 
gcc -g -std=c99 -Wall -c field.c 
gcc -g -std=c99 -Wall -c testField.c 
gcc -g field.o testField.o -o testField 
#testField get 0xa 0 1 > PA1output.txt 
#testField get 0xaa 0 3 >> PA1output.txt 

내 대본이가 실행 testField에 field.c 및 testField.c를 컴파일 할 수 있습니다. 마지막 2 줄을 주석 처리했는지 여부와 상관없이, 리눅스 터미널이 멈추고 10 초 동안 아무 일도 일어나지 않으면 Ctrl + C 키를 눌러 중지시킵니다. 궁극적으로 출력을 PA1output.txt로 리디렉션하고 파일 끝에있는 내용을 연결하려고하지만 매번 파일 내용을 다시 쓰려고합니다.

는 지금까지 내가 그것을 이해> 지정된 파일의 내용을 재 작성하고, >>는 말에 연결합니다.

이 내 숙제를하지 않습니다, 나는 내가 가진 다른 숙제의 테스트를 자동화하고 싶다. 'testField get 0xaa 0 3 내 C 프로그램에 인수입니다.'

나는 Bash script hangs 을 시도하지만 그건 전적으로 내 질문에 대답하지 않았다.

입력하기 쉽도록 내 스크립트를 '다른 이름'이라고합니다.

왜 터미널이 멈추고 위에서 설명한 내용을 스크립트에 어떻게 적용합니까?

감사합니다.

+1

아마도 'testField'의 기능에 따라 달라질 수 있습니다. 예를 들어 사용자 입력을 기다리는 경우 영원히 멈추게됩니다 ... –

답변

5

시스템에는 어셈블러 인 'as'라는 다른 프로그램이 있습니다. 스크립트보다는이 스크립트를 실행하는 것이 좋으며 어셈블러가 터미널에서 입력을 기다리고 있기 때문에 중단됩니다.

당신이 이름을 유지 주장하는 경우에, 당신은 올바른 프로그램이 실행되도록 ('./as'와 같은) 전체 또는 부분 경로 이름으로 스크립트를 실행해야합니다.

당신은 아마 스크립트의 첫 번째 라인의 시작 부분에 '#'없이 실행되지 않습니다 것을 발견 할 것이다. 그러나 스크립트를 실행하는 또 다른 방법은 명령 줄에서 'sh ./as'입니다.이 명령은 #! 선.

+0

+1 나를 펀치에 맞 춥니 다 –

1

제레미가 설명한 바와 같이, 이름 충돌이 일어날 가능성이 큽니다.

커맨드 라인에서 스크립트를 실행한다면 (나는 정말로 당신이되기를 바랍니다), 스크립트 (그리고 그 문제에 대한 모든 파일 이름)를 두려워 할 필요는 없습니다.하지만 더 구체적인 이름들 . 리눅스의 명령 행 인터페이스 (전부는 아닐지라도)는 탭 확장 형식을 가지고 있습니다. 고유 한 이름을 입력 한 다음 [Tab] 키를 누르면 쉘이 이름을 완성해야합니다.

여기 a more thorough explanation for Bash입니다.

+0

답변이 마음에 들지만 제공되는 링크가 유용했지만 @Jeremy는 해당 사용자가 이유를 설명했기 때문에 확인했습니다. 내 대본이 작동하지 않았다. – Clara

관련 문제