gpt4 book ai didi

bash - 为什么我的循环有时不读取整行?

转载 作者:行者123 更新时间:2023-11-29 09:26:57 30 4
gpt4 key购买 nike

我已经用谷歌搜索这个问题好几个小时了,以前从未遇到过。我有一个脚本可以为我公司 PRN 的教学视频创建缩略图 gif。当我运行它时,shell 有时会省略一半的文件路径,因此失败。

这是在 debian 9 机器 (bash) 上。我已经尝试了很多方法来编写循环,包括通过管道传输到一个文件(结果是正确的),然后将它读回一个循环(然后混合我的输出)。我已经尝试从脚本的第一行设置 -x ,这似乎肯定是 shell 本身的问题。结果也各不相同。有时我放入一个文件并得到 30 个字符,有时它只读取 22 个字符,但失败的总是相同的文件。 od -xa 显示中间没有错误的字符。

这是我当前的循环开始点,也是事情开始失败的点,所以我不会费心发布其余部分。

PPATH="/home/pi/pmount/prntest"

find "$PPATH" -type f -iname "*.mp4" >tempfile

cat -v tempfile | while read i
do
makethumbs "$i"
echo "$i" >>test.txt
done

例如文件的路径是 /home/pi/pmount/prntest/Security Training/Example #1.mp4

示例输出:

/prntest/Security Training/Example #1.mp4

urity Training/Example #1.mp4`

当然这个是解析不了的。有任何想法吗?我将不胜感激。

编辑:

所需信息:

Shell: /bin/bash 

GNU bash, Version 4.4.12(1)-release (x86_64-pc-linux-gnu) Copyright (C) 2016 Free Software Foundation, Inc.

Linux 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16) ```

最佳答案

最好输出空的 $'\0' 终止条目,而不是换行符 $'\n'find 命令的 -print0 选项就是这样做的。

这是您更正后的代码:

#!/usr/bin/env bash

PPATH=/home/pi/pmount/prntest

find "$PPATH" -type f -iname "*.mp4" -print0 >tempfile # write null-terminated strings to tempfile

while read -r -d '' i # -r do not expand globbing characters and -d '' use a null delimiter
do
makethumbs "$i"
echo "$i" >>test.txt
done <tempfile # inject the tempfile for the whole loop

关于bash - 为什么我的循环有时不读取整行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56870161/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com