7 年后:同样的问题 - 相同的不完整错误消息在“找不到文件”上失败,但未指定目标

7 年后:同样的问题 - 相同的不完整错误消息在“找不到文件”上失败,但未指定目标
locale: Cannot set LC_ALL to default locale: No such file or directory

这种情况是在从 Debian Jessie 升级到 Stretch(在升级到 Buster 的过程中)之后开始发生的。

在这里查询,同样的问题已经发生多年了。

错误消息没有指定未找到哪个文件。

更让我惊讶的是(在阅读了多个线程之后)没有人注意到这一点。就好像输出不完整的错误消息是可以的。

Linux 已经达到了一定程度的复杂性,找出谁拥有此代码并要求更改介于兼职工作和不切实际的任务之间

如果您不告诉我们出了什么问题,我们就无法帮助您。

答案1

No such file or directory是与错误代码关联的错误消息ENOENT

这是缩写错误 没有输入,因此通常与目录没有给定名称的条目相关,但它也经常用来表示不存在,即使这不是专门针对给定文件的。

或者,有时也ESRCH使用。那是错误海RCH,但是相应的英文错误消息通常是,No such process如果错误不是专门与进程有关的,那么最终会更令人困惑。

无论如何,在您的情况下,错误告诉您无法找到区域设置。它可能指也可能不指实际文件,但这几乎不相关。

在这里,如果我这样做:

$ LC_ALL=foo locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
$ LC_ALL=foo strace locale 2>&1 | grep ENOENT
openat(AT_FDCWD, "/usr/lib/locale/foo/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/foo/LC_MESSAGES", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/foo/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

我确实看到一些系统调用因ENOENT错误而失败,但路径不一定与错误相关。

对于确实存在的语言环境,我看到:

$ strace locale 2>&1 | grep /usr/lib/locale
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3

它不需要寻找额外的文件,因为所有信息都在该文件中locale-archive

locale -a会告诉您系统上可用区域设置的列表。如果任何LC_*LANG环境变量包含该列表中未包含的内容,您就会看到此类错误。

如何使更多区域设置可用取决于系统。

在 Debian 上,通常使用dpkg-reconfigure locales.一般来说,最终,语言环境最终会使用localedef标准命令从源代码进行编译。

相关内容