2012-04-20 3 views
-1

C로 작성된 클래스 중 하나에 대해 Linux 쉘을 만들었습니다. 쉘은 ls, pwd, ps, top, cd 등과 같은 명령을 완벽하게 실행합니다.Linux 쉘용 Makefile 사용 중 C로 작성된

그러나 MakeFile (제출 프로세스의 일부이기 때문에)을 사용하면 터미널에서 "make test"명령을 사용할 때 내 프로그램의 모든 올바른 출력 사이에 tcsetpgrp: Inappropriate ioctl for device" 오류가 발생합니다. Makefile 내에서 나는 test: test.txt | .project4.c을 가지고 있는데 test.txt는 쉼표 대신 줄 바꿈으로 구분 된 ls, pwd, ps, top, cd 명령입니다. 이 오류는 무엇이며 어떻게 제거합니까?

PAWPRINT=myname 

project4: 

clean: 
    rm -f *.o 

nuke: 
    rm -f *.o project4 *.gz 

test: project4 
    cat test.txt | ./project4 

submit.sh: 
    wget -O submit.sh http://somewebsite.com/submit.sh 
    chmod +x submit.sh 

project4.tar.gz: project4.c test.txt Makefile 
    mkdir -p dist 
    cp $^ dist 
    tar -cvzf [email protected] dist 

submit: submit.sh project4.tar.gz 
    PAWPRINT=$(PAWPRINT) sh submit.sh project4.tar.gz 

가 여기 내있는 test.txt 파일입니다 :

여기 내 메이크 인 메이크 파일의 외부에 개별적으로 명령을 실행할 수 있습니다

sleep 1000 & 
jobs 
pwd 
ls 
echo hello > a.txt 
echo world > b.txt 
cat a.txt b.txt > c.txt 
cat c.txt 

내 프로그램. 할당 명령이 무엇인지에 대한 이유 때문에이 명령을 처리하도록 프로그램을 설계했습니다.

+0

전체 Makefile을 게시하십시오. – user1202136

+0

'cd' 명령을 Makefile 레시피에 넣는 것은 효과가 없으므로 의심스러운 것으로 들립니다. Makefile 레시피에'top'을 넣는 것은 더욱 의심 스럽습니다. 쉼표로 명령을 분리하는 것과 관련하여? 내가 아는 쉘 같은 언어가 없다. 따라서 user1202136이 말한대로 Makefile을 게시하십시오. – Celada

+0

Makefile 내부에서 Cat을 쓸모 없게 사용. – Kaz

답변

1

그렇다면 tcsetpgrp가 프로그램 출력에서 ​​나오는 것을 의미하는 것입니까? 물론 이것은 MakeFile과 관련이 없지만 제출 프로세스 내에서 프로그램을 실행 한 결과입니다. 프로그램이 프로세스 그룹이 되려고 시도하고있어 제어 터미널에 전경 프로세스임을 알리려고합니다. 그러나 submission 프로세스 안에 있기 때문에 터미널이 없으므로 tcsetpgrp()는 더 자세한 정보를 얻으려고 불평합니다 (man tcsetpgrp (3)). 일반적으로 이것은 성가 시지만 무해합니다.

+0

요청한 파일을 첨부했습니다. –

+0

이 문제는 이것이 과제를위한 것이며, 문제를 해결할 방법을 찾지 못하면 "오류 메시지"로 인해 과제에서 점수를 잃게됩니다. 어떤 아이디어? –

+0

@Kaz 셸이 test.txt를 명령으로 인식하지 못하기 때문에 같은 것을 생각했지만 선행 고양이가 없다면'myshell #/bin/sh : test.txt : command not found '라는 오류 메시지가 나타납니다. –

관련 문제