GNU Parallel中`-a`与`cat`管道方式的差异及报错原因咨询
报错原因解析
两个命令的核心逻辑完全不同:
- 管道模式(
cat input.dat | parallel --pipe ...):parallel会把输入当作流式数据处理,通过--pipe将数据按--block-size分割成128字节的块,直接把每个块通过标准输入传给<command>,全程不会把文件内容解析成命令行参数,所以NUL字符可以正常流转,不会触发错误。 -a input.dat模式:这个选项是让parallel把文件内容当作命令行参数列表来处理。默认情况下parallel会按换行符拆分输入内容,把每一段作为参数传给<command>,但Unix系统的命令行参数列表不允许包含NUL字符(因为系统用NUL来分隔不同参数),所以当文件里有NUL时,parallel就会替换NUL并抛出警告。
- 管道模式(
报错里提到的
--null选项,是让parallel用NUL作为参数的分隔符,但这依然是处理参数列表的场景,和你用--pipe处理固定字节块的需求不匹配,所以不适用。
内容的提问来源于stack exchange,提问作者Geremia
相关产品推荐
相关产品推荐

