我目前是一个应该检查一些数据的bash脚本。到目前为止我得到的是:
#!/bin/bash
find "./" -mindepth 1 -maxdepth 1 -type d -print0 | while IFS= read -r -d '' file; do
folder=${file##*/}
echo "Checking ${folder} for sanity..."
./makeconfig ${folder} | while read -r line; do
title=`echo $line | awk -F' ' '{print $2}'`
echo $title
done
done
现在它的作用是:搜索./
中的每个目录并提取文件夹名称(因此:从./
的结果中删除find
)。然后把它交给一个自编的工具,输出一些这样的行:
-t 1 -a 2
-t 3 -a 5
-t 7 -a 7
-t 9 -a 8
我通过awk收集-t
后面的值。到目前为止这也有效,问题是,外部while循环在第一次迭代后停止,因此只检查一个文件夹。我的猜测是内环和外环的两个read
命令以某种方式发生碰撞。工具makeconfig
definitiveley始终返回0
(无错误)。我尝试使用sh -x script.sh
调试它,但它没有向我显示任何我可以处理的内容。
有人能指出我在哪里出错了吗?如果您需要任何进一步的信息,我可以给他们。如果你想在这里测试bash脚本(现在也是一个脚本,只是回应一些东西),我写了一个快速的模仿程序,只需通过chmod +x
使其可执行:
echo "-t 3 -a 4"
echo "-t 6 -a 1"
echo "-t 9 -a 5"
只需将脚本放在一个文件夹中并创建一些子文件夹,就可以使其工作(尽可能多)。
提前致谢!
编辑:如上所述,这不是重复。这里的问题是嵌套的读命令比print0
更多(也许这也与它有关,但并不完全)。
答案 0 :(得分:0)
IFS=
未将字段分隔符设置为空字符串(\0
),但未完全取消设置,因此立即读取find
命令的整个输出。如果你在没有-print0
参数的情况下运行find
,那么在bash中使用它会更容易。另外两种选择:
xargs
在找到的唯一参数-exec
在每个项目上运行shell脚本。