【问题标题】:Bash java auto compilerBash java自动编译器
【发布时间】:2012-10-16 14:20:18
【问题描述】:

我目前正在尝试制作一个 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

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

【问题讨论】:

  • 看来你可以使用 antjavac 任务而不是编写脚本

标签: linux bash javac


【解决方案1】:

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

【讨论】:

  • 是的,这是一个剪切/粘贴错误。你是对的,它没有备份目录
【解决方案2】:

cd 进入目录,但从未将 cd 退出。

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

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

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

【讨论】:

    【解决方案3】:

    这是另一种方式,如果您想通过一次调用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 2019-02-22
      • 2012-07-05
      相关资源
      最近更新 更多