【发布时间】:2020-12-23 16:38:39
【问题描述】:
我正在使用递归 for 循环,它不断重复列表中第一个目录的命令,而不是移动到下一个目录。这是我的代码:
#!/bin/bash
touch bm4ranks.table
tmp_file=$(mktemp /tmp/file.XXX)
function recursive_for_loop {
for f in *; do
if [ -d $f -a ! -h $f ];
then
cd $f;
cd output.$f;
touch tmp.$f;
head -11 $f.bm4ranks | cut -c 22-28 > tmp.$f;
TMPTOPTEN=$(awk ' { t = $1; $1 = $2; $2 = t; print; } ' tmp.$f | cut -c 1-3,5-7 | paste -s)
echo $TMPTOPTEN > tmp.$f
mv tmp.$f ..
cd ..
mv tmp.$f ..
cd ..
TOPTEN=$(cat tmp.$f)
echo "$f $TOPTEN" >> bm4ranks.table
echo Done Transferring Top Ten for $f
PID="$!"
echo "$PID:$f" >> $tmp_file
PID_LIST+="$PID "
# use recursion to navigate the entire tree
recursive_for_loop;
cd ..;
fi;
done;
};
recursive_for_loop
我有一个文件夹目录,其中每个文件夹都有一个唯一的输出子文件夹。我正在提取前 11 行,剪切一些部分,合并剩下的两个字段,然后将这些值作为一行而不是一列粘贴到一个名为 bm4ranks.table 的文件中。我知道我的命令在我运行它时工作,我在我的 bm4ranks.table 中得到了我想要的输出,但问题是它一遍又一遍地粘贴同一组等级,而不是遍历目录列表并终止.为什么会这样?
【问题讨论】:
-
您需要包含minimal reproducible example,而不是您的整个程序。
-
这可能会有所帮助:shellcheck.net