GNU Coreutils 9.12 运维笔记:env --env0-from 与默认 shell 引号
coreutils 是几乎所有 Linux 发行版都带的命令集合:ls、cp、mv、rm、mkdir、chmod、chown、cat 等。9.12 于 2026-09-14 发布,作者 Pádraig Brady。发布说明:GNU Coreutils 9.12。
新特性
env --env0-from=FILE
env 新增 --env0-from=FILE,从文件读取 NUL 分隔的环境项。配合 -i 时,条目被精确保留,可完整往返包含重复或非标准条目的环境:
env -i --env0-from=env.nul command
按 NUL 切分而不是按换行切分,环境项中原本含换行、重复条目或非标准名称时,不会被拆分重写。
stat / tail 认识 failfs 和 nullfs
stat -f -c%T 现在能报告 failfs 与 nullfs 文件系统类型;tail -f 对这些文件系统使用 inotify。
uname -A
uname 新增 -A,给所有输出加标签,每项一行。
行为变更
env / printenv 按 QUOTING_STYLE 加引号
env 和 printenv 现在按 QUOTING_STYLE 环境变量给打印的环境变量加引号,默认 shell-escape 风格。这样避免把任意数据直接打到终端,输出也可被 POSIX shell source。
依赖原样切分的写法要复核,例如 eval $(env)、export $(printenv)、按空格或换行逐项解析 env 输出的脚本。机器可读场景继续用 env -0 或 --env0-from 成对读取;输出风格由 QUOTING_STYLE 控制,默认不是裸文本。
ls -w / --width 不再把换行算进行宽
ls -w N 与 $COLUMNS 的宽度现在被解释为包含式最大值,\n 不再计入行宽。按固定宽度切分 ls 输出的脚本,列数和换行位置可能变化。需要稳定单列时可用 ls -1。
stat 默认 shell 引号,新增 %Qn
stat 在需要时使用 shell 引号更稳健地转义文件名;此前只在 %N 格式下加引号。默认引号遵循 QUOTING_STYLE,%N 亦然。新增 %Qn 格式组合用于给文件名加引号,保留 %n 用于不加引号的场景。
解析 stat -c %N 的脚本要处理可能出现的引号;要拿裸文件名用 %n,要显式加引号用 %Qn。
脚本自查
- 搜索
eval、export、while read中解析env/printenv的位置,改用env -0或--env0-from,或显式 shell source。 - 检查
ls -w、$COLUMNS相关的列宽计算,重新确认换行行为。 - 检查
stat -c %N输出解析;裸名切到%n,需要引号用%Qn。 - 升级后先在 staging 或 CI 跑一遍依赖这些输出的脚本,再推到生产。