2

我有一个脚本可以在作业完成时生成一个 .log 文件。我不希望它继续前进,直到 .log 文件的数量等于 .com 文件的数量。目前,如果我执行此脚本,它将启动循环,然后立即跳过实际循环并继续执行脚本。

根据我从阅读中收集到的信息,这个脚本没有理由不工作。它应该在循环中被捕获,直到这两个值彼此相等。

$direct 是工作目录

 COM="find $direct -maxdepth 1 -type f -name *.com" 
 log="find $direct -maxdepth 1 -type f -name *.log" 
 until [[ $($COM | wc -l) = $($log | wc -l) ]];
 do
    sleep 10
 done 

 echo name EE E+ZPE E+U E+H G | cat > allRE 
 for i in R[R,S]*.out
     do echo $i | cat > $i.energies && 
     #cat temp.txt > $i.energies
     #echo $i is finished
 done 

我得到的是它提交作业(它被编码到未显示的脚本的一部分),启动循环(当我查看进程列表时我可以看到睡眠命令),然后尝试执行显示的部分脚本只是发现没有 .out 文件(一旦作业开始在我使用的超级计算机上运行就会创建),然后继续执行脚本。

我被要求用 -x 运行它。我不知道我在找什么,所以这里是涉及循环的部分:

 ++ COM='find /ddn/home6/r2536/G09Input/test2/low/com -maxdepth 1 -type f -name *.com'
 ++ log='find /ddn/home6/r2536/G09Input/test2/low/com -maxdepth 1 -type f -name *.log'
 +++ find /ddn/home6/r2536/G09Input/test2/low/com -maxdepth 1 -type f -name RR1.com RR2.com RR3.com RR4.com RR5.com RR6.com SS1.com SS2.com SS3.com SS4.com SS5.com SS6.com
 +++ wc -l
 find: paths must precede expression: RR2.com
 Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
 +++ find /ddn/home6/r2536/G09Input/test2/low/com -maxdepth 1 -type f -name '*.log'
 +++ wc -l
 ++ [[ 0 = 0 ]] #if this is saying that there are no .com files, I don't get it, because the script just made and submitted 12 .com files.
 ++ echo name EE E+ZPE E+U E+H G
 ++ cat
 ++ for i in 'R[R,S]*.out'
 ++ echo 'R[R,S]*.out'
 ++ cat
 ++ grep 'SCF D' 'R[R,S]*.out'
 ++ tail -1
 grep: R[R,S]*.out: No such file or directory
4

0 回答 0