2

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

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

4

3 回答 3

1

cd进入目录但永远不会cd离开它。

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

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

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

于 2012-10-16T14:22:47.400 回答
1

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

于 2012-10-16T14:24:40.027 回答
0

这是另一种方式,如果您想通过一次调用 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
于 2014-04-25T18:27:40.113 回答