如何使用makefile测试我的shell实现?

时间:2013-02-26 03:00:49

标签: c shell testing makefile

这是我当前的makefile,它没有正确运行测试:

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测试期间执行新行时,我都必须按ctrl + D.

我正在尝试为我的班级编写这个makefile,以便我可以提交我的作业,我的教授根本没有解释如何使用makefile除了基本的 ./a.out [输入命令]

如果程序在像shell一样的连续循环上运行,他从未解释过如何使用makefile,等待用户按下[enter]或新行来解析命令。

我检查了GNU man for 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

1 个答案:

答案 0 :(得分:1)

看起来你正试图为你的程序提供输入。您不能使用make(直接)执行此操作,因为make只需使用/bin/sh -c COMMAND执行每一行。

你能做的是

test: shell2
    ./shell2 < test_input.txt

将输入重定向到文件test_input.txt,该文件将包含您想要的命令。