编程 GNU Coreutils 9.12 运维笔记:env --env0-from 与默认 shell 引号

2026-09-16 21:04:31

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

脚本自查

  • 搜索 evalexportwhile read 中解析 env / printenv 的位置,改用 env -0--env0-from,或显式 shell source。
  • 检查 ls -w$COLUMNS 相关的列宽计算,重新确认换行行为。
  • 检查 stat -c %N 输出解析;裸名切到 %n,需要引号用 %Qn
  • 升级后先在 staging 或 CI 跑一遍依赖这些输出的脚本,再推到生产。
复制全文 生成海报 Shell Linux 命令行 运维

推荐文章

程序员茄子在线接单