我有一个脚本可以在作业完成时生成一个 .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