Bash java auto compiler



我目前正在尝试制作一个 bash 脚本,该脚本将进入 ./中的每个文件夹并编译 blah.java,然后运行 blah 发送一个数字作为输入,并将输出放在我命名的文件中。我有一些功能,但它只进入第一个目录,之后它对我来说失败了。我目前有...

#! /bin/bash

for i in $(find . -maxdepth 1 -type d)
do
    pwd
    cd $i
    pwd
    if [ -f "blah.java" ];
    then
        javac -cp . blah.java
        echo "17" | java -cp . blah - > blahresult17
        echo "43" | java -cp . blah - > blahresult43
    fi
done

我认为它有问题,因为它一旦进入子目录就试图从 ./进入目录,但显然从子目录中它不存在。

你的if上缺少一个fi,但这可能是一个剪切和粘贴错误,而不是你失败的根源。 可能的问题是,一旦你做了第一个cd,下面的cd命令是相对于你过去的位置,而不是你现在的位置。 您可以使用 pushd/popd 来解决此问题,或者在子 shell 中运行 cd 和 java 位,以便 cd 不会持续到下一个循环迭代。

cd到目录中,但永远不会cd出它。

我的建议:使用pushd/popd而不是cd

cd $i替换为pushd "$i",并将popd放在循环的末尾。

此外,for dir in */迭代当前目录中所有目录的更简单的解决方案。

如果你想

通过一次javac调用编译所有文件,这是另一种方法,它允许javac处理依赖关系:

SRC=`find src -name "*.java"`
if [ ! -z $SRC ]; then
    javac -classpath $CLASSPATH -d obj $SRC
    # stop if compilation fails
    if [ $? != 0 ]; then exit; fi
fi

相关内容

  • 没有找到相关文章

最新更新