在 Windows 中,无论是 Batch 还是 PowerShell,命令行中的字符串解析都是一场赌博。基本命令行工具(如 )以字符串形式fsutil
返回dcdiag
其输出,这些字符串已国际化为操作系统安装的语言,如果不考虑对每种语言的措辞和格式选择的支持,几乎不可能以一刀切的方式编写脚本。
只要有可能,我就会用 PowerShell 编写(返回对象代替字符串) 并使用 WMI 返回非本地化的枚举器我通过查找表进行翻译;然而,总会有一些工具作为设备上收集所需信息的唯一手段。
我现在正在编写一个用于 macOS 调用(在本例中)该工具的脚本csrutil
。
与许多 *nix 实用程序一样,它的输出是字符串格式。运行它会产生以下输出:
System Integrity Protection status: unknown (Custom Configuration).
Configuration:
Apple Internal: disabled
Kext Signing: disabled
Filesystem Protections: disabled
Debugging Restrictions: disabled
DTrace Restrictions: disabled
NVRAM Protections: disabled
BaseSystem Verification: enabled
This is an unsupported configuration, likely to break in the future and leave your machine in an unknown state.
不知何故,互联网上没有我能找到的关于这个主题的任何知识,因此:
苹果在终端输出国际化方面有多积极?
这不是关于 Bash 或 ZSH 的问题,因为我知道它们始终是英文的,但 macOS 因创建不兼容的 Apple 专用 POSIX 工具分支而臭名昭著;此外,如上所示,有许多 Apple 开发的命令行工具用于管理 macOS 系统。我是否应该假设这些工具至少会被翻译成德语,并购买安装了德语的 macOS 设备?还是一切都始终是英文的?
总的来说,我想问的是,Apple 打造的命令行工具应该具有多大的国际化程度。
答案1
目前,大多数(非 .app)系统管理工具都只有英文版本。这有利于解析输出。
例如,您可以尝试检查如下二进制文件:
strings /usr/bin/csrutil | less
在这种情况下,二进制文件中不存在任何翻译
您可能会考虑设置$LANG
或$LC_MESSAGES
区域设置(只是本地在你的脚本中使用env
),例如
env LC_MESSAGES=C /usr/bin/csrutil
env
csrutil
将在环境变量设置为“C”的情况下启动LC_MESSAGES
,这是一个特殊设置,表示“将该程序视为尚未本地化”。
这将导致此会话输出英文,但总体上不会对您的系统产生影响。