我使用make文件创建一个简单的shell脚本来执行Java程序,makefile如下:
top:
javac -d classfiles -sourcepath src src/kruskal.java
test:
echo java -classpath classfiles kruskal \$\* > kruskal
chmod +x kruskal
clean:
rm -f classfiles/"/".class
然而,当我运行make test然后尝试执行我的程序(它接受命令行参数)java尝试使用参数" -classpath"来运行程序。和#34; classfiles"作为参数,导致程序抛出FileNotFoundException。我用:
运行程序kruskal g1.txt
我做错了吗?这是我第一次使用shell脚本,感谢任何帮助。
编辑:这里也是确切的错误:
java.io.FileNotFoundException: classfiles (Access is denied)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.util.Scanner.<init>(Unknown Source)
at kruskal.readInputs(kruskal.java:20)
at kruskal.main(kruskal.java:172)
Exception in thread "main" java.lang.NullPointerException
at kruskal.BFS(kruskal.java:132)
at kruskal.main(kruskal.java:177)
答案 0 :(得分:2)
要在Makefile中转义$
,请使用另一个$
。 kruskal
文件的当前内容实际为java -classpath classpath kruskal *
,*
使用当前目录中的classpath
等文件进行扩展。或者更糟糕的是*
已经被运行echo
命令的shell扩展了。
所以要使Makefile
行正确:
test:
echo "java -classpath classfiles kruskal \$$*" > kruskal