有人能帮帮我吗?我有一个我正在处理的shell脚本但是在" echo&#34之后的命令下面的循环;第一个文件是$ firstbd"没有被执行.. $ PROBIN / proutil?不知道为什么会这样......
基本上我有一个目录(* .list)中的文件列表,我抓住它们并读取第一行并将其作为参数传递给cmdlet然后将.list和.list的内容移动到另一个目录(.list有一个完整路径的文件列表)。
for i in $(ls $STAGEDIR/*.list); do
echo "Working with $i"
# grab first .bd file
firstbd=`head -1 $i`
echo "First file is $firstbd"
$PROBIN/proutil $DBENV/$DBNAME -C load $firstbd tenant $TENANT -dumplist $STAGEDIR/$i.list >> $WRKDIR/$i.load.log
#move the list and its content to finished folder
binlist=`cat $i`
for movethis in $binlist; do
echo "Moving file $movethis to $STAGEDIR/finished"
mv $movethis $STAGEDIR/finished/
done
echo "Finished working with list $i"
echo "Moving it to $STAGEDIR/finished"
mv $i $STAGEDIR/finished/
done
我得到的错误是......
./ tableload.sh:line 107:/ usr4 / dlc / bin / proutil / usr4 / testdbs / xxxx2 -C load /usr4/dumpdir/xxxxx.bd tenant xxxxx -dumplist /usr4/dumpdir/PUB.xxxxx。 list>> /usr4/dumpdir/PUB.xxxx.list.load.log:路径名中的文件或目录不存在...但是如果我运行" / usr4 / dlc / bin / proutil"
修复方法是删除">> $ WRKDIR / $ i.load.log" ..当尝试将结果输出到文件时,二进制实用程序不会运行..奇怪..
答案 0 :(得分:1)
这里有一些非常不好的做法
ls
cat
和for
作为住所评论,您不会检查您是否已在日志文件的路径中创建了所有目录。
重写:
for i in "$STAGEDIR"/*.list; do
echo "Working with $i"
# grab first .bd file
firstbd=$(head -1 "$i")
echo "First file is $firstbd"
# ensure the output directory exists
logfile="$WRKDIR/$i.load.log"
mkdir -p "$(dirname "$logfile")"
"$PROBIN"/proutil "$DBENV/$DBNAME" -C load "$firstbd" tenant "$TENANT" -dumplist "$STAGEDIR/$i.list" >> "$logfile"
# move the list and its content to finished folder
while IFS= read -r movethis; do
echo "Moving file $movethis to $STAGEDIR/finished"
mv "$movethis" "$STAGEDIR"/finished/
done < "$i"
echo "Finished working with list $i"
echo "Moving it to $STAGEDIR/finished"
mv "$i" "$STAGEDIR"/finished/
done