busy box 没有附带读取小程序。
有没有办法使用busybox逐行读取txt文件?
我现在拥有的是
while read line
do
echo $line
done < "$InputFile"
答案1
read
是 shell 内置函数(如果不是,则无法设置 shell 变量)。
所以,如果你的 busyboxsh
基于ash
,那么它是:
while IFS= read -r line <&3; do
printf '%s\n' "$line"
done 3< "$InputFile"
就像在任何 POSIX shell 中一样。但就像任何贝壳一样,使用while read
循环来处理文本通常是不好的 shell 脚本实践。
以上,您需要:
IFS=
否则,前导和尾随未转义空格和制表符将从行中剥离-r
,否则反斜杠将被视为转义字符并被删除(除非转义)printf
,而不是echo
不适用于例如-nene
"$line"
引用(不是$line
),否则该行的内容将在空格和制表符上拆分,并且扩展通配模式。<&3
并且3< ...
,如果您需要访问循环内的原始标准输入。
如果文件最后一行之后包含字符并且您想要显示它们,您可以在循环后面添加:
[ -z "$line" ] || printf %s "$line"
请注意,该循环无法处理二进制数据(NUL
字符)。
答案2
我设法通过使用解决了我的要求
head testInputs/test1 -n $getLineNum | tail -n 1
getLineNum 在每个 while 循环上递增。
但这不是我问题的确切答案。
此外,您还需要在最后一行添加一些类似 #EOF 的内容并搜索它以打破循环。