0

テストを正しく実行しない現在のメイクファイルは次のとおりです。

shell2: shell2.o
shell2.o: shell2.c

clean:    
        rm -f *.o 

test: shell2
        ./shell2 
        pwd 
        ./shell2
        cd ..
        ./shell2
        jobs
        ./shell2
        sleep 100 &
        jobs
        ./shell2
        exit

コマンドがいつ入力されたかを知るために、私のプログラムは改行をテストします。これは、自分で手動でコンパイルしたときのプログラムの出力です。

$ pwd
/students/8/[redacted]/[redacted]/Shell2
$ cd ..
$ jobs
Jobs:
$ sleep 1000 &
To the background: 20203
$ jobs
Jobs:
20203
$ jobs
Jobs:
20203
$ killall sleep
sleep(17014): Operation not permitted
sleep(17305): Operation not permitted
sleep(17433): Operation not permitted
sleep(19741): Operation not permitted
sleep(19841): Operation not permitted
sleep(20041): Operation not permitted
sleep(20183): Operation not permitted
$ jobs
Jobs:
$ exit
now exiting...

make test を実行したときの出力は次のとおりです。

make test
./shell2 
$ pwd
/students/8/[redacted]/[redacted]/Shell2
./shell2
$ cd ..
./shell2
$ jobs
make: jobs: Command not found
make: *** [test] Error 127

また、make test 中に新しい行を実行するには、毎回 ctrl+D を押す必要があります。

課題を提出できるようにクラス用にこのメイクファイルを作成しようとしていますが、教授は基本的な ./a.out [入力コマンド] 以外のメイクファイルの使用方法をまったく説明しませんでした。

彼は、プログラムがシェルのように連続ループで実行され、ユーザーがコマンドを解析するために [Enter] または改行を押すのを待っている場合に、makefile を使用する方法を説明しませんでした。

GNU man で make を確認しましたが、「テスト」セクションではあまり説明がありませんでした。

助けてくれてありがとう、本当に感謝しています。

test_input.txt の出力:

./shell2 < test_input.txt
"Sending command: pwd"
/students/8/[redacted]/[redacted]/Shell2
"Sending command: cd .."
"Sending command: pwd"
/students/8/[redacted]/[redacted]
"Sending command: jobs"
$ $ $ $ $ $ $ $ Jobs:
$ 
"Sending command: sleep 1000 &"
$ $ To the background: 27199
"jobs"
$ $ Jobs:
27199
$ 
"Sending command: killall sleep"
$ $ $ $ Jobs:
"Sending command: jobs"
$ $ now exiting...
"exit"

test_input.txt:

echo "Sending command: pwd"
pwd
echo "Sending command: cd .."
cd ..
echo "Sending command: pwd"
pwd
echo "Sending command: jobs"
jobs

echo "Sending command: sleep 1000 &"
sleep 1000 &
echo "jobs"
jobs

echo "Sending command: killall sleep"
killall sleep
echo "Sending command: jobs"
jobs
echo "exit"
exit
4

1 に答える 1

1

プログラムに入力を提供しようとしているようです。make は単純に各行を/bin/sh -c COMMAND.

あなたができることは

test: shell2
    ./shell2 < test_input.txt

test_input.txt必要なコマンドを含むファイルに入力をリダイレクトします。

于 2013-02-26T04:06:04.140 に答える