2012-04-20 29 views
-1

私はCで書かれた私のクラスの1つのLinuxシェルを作成しました。シェルはls、pwd、ps、top、cdなどのコマンドを完全に実行します。LinuxシェルでMakefileを使用するとエラーが発生する

しかし、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とは関係ありませんが、提出プロセスの中でプログラムを実行した結果です。あなたのプログラムはプロセスグループになりようとしており、その制御端末にフォアグラウンドプロセスであることを伝えようとしています。しかし、あなたが提出プロセスの中にいるので端末がないので、tcsetpgrp()は(man tcsetpgrp(3)の詳細について)文句を言います。一般的に、これは無害ですが、迷惑です。

+0

私は要求されたファイルを添付しました。 –

+0

これは問題を解決する方法が見つからない場合、これは課題のためのものであり、 "エラーメッセージ"は課題のポイントを失います。何か案は? –

+0

@Kaz私はシェルとtest.txtをコマンドとして認識しないので、同じことを考えましたが先行するcatはなく、 'myshell#/ bin/sh:test.txt:command not found'というエラーメッセージが表示されます。 –

関連する問題