我正在尝试使 Bash 脚本严格符合 POSIX 标准,即消除任何潜在的“Bashisms http://mywiki.wooledge.org/Bashism“ 通过使用checkbashisms -px ${script_filename}
。在给定的文件中,我使用以下命令遍历目录find
然后将每个文件路径通过管道传输到read
using \0
作为分隔符使用-print0
为了能够处理包含换行符的文件名:
find . -print0 | while read -d $'\0' inpath
do
echo "Reading path \"${inpath}\"."
done
然而,checkbashisms http://manpages.ubuntu.com/manpages/precise/man1/checkbashisms.1.html不喜欢这个,因为选项-d不严格符合 POSIX 标准 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html:
可能在……行中受到攻击n(使用 -r 以外的选项读取)
我如何编写符合 POSIX 标准的等效代码,即读取输出find
使用非换行符分隔符?
Without -d
选项,read
内置无法读取空终止数据。
你可以在以下位置执行此操作find + xargs
:
find . -mindepth 1 -print0 | xargs -0 sh -c 'for f; do echo "Reading path \"$f\""; done' _
或者,如果您不介意为每个文件生成一个 shell,请使用find
:
find . -mindepth 1 -exec sh -c 'echo "Reading path \"$1\""' - {} \;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)