用于Java的Shell脚本无法正常工作

时间:2016-04-26 19:13:14

标签: java bash shell makefile

我使用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)

1 个答案:

答案 0 :(得分:2)

要在Makefile中转义$,请使用另一个$kruskal文件的当前内容实际为java -classpath classpath kruskal **使用当前目录中的classpath等文件进行扩展。或者更糟糕的是*已经被运行echo命令的shell扩展了。

所以要使Makefile行正确:

test:
         echo "java -classpath classfiles kruskal \$$*" > kruskal