相关疑难解决方法(0)

设置环境变量的最佳发行版/外壳不可知方式是什么?

问题说明了一切。我目前使用 Arch Linux 和 zsh,但我想要一个(至少)既适用于 VT 又适用于 xterm 的解决方案,并且(希望最好)在我切换发行版或 shell 时仍能继续工作。

我在不同发行版的文档中听到了对这个问题截然不同的答案。Ubuntu 说“使用 .pam_environment”。我认为在 Arch 中,他们推荐的内容取决于您的外壳。目前,我将所有内容都放在.profile 中,如果由于某种原因 shell 没有提供它(例如,如果 .bash_profile 存在则为 bash),我会通过手动获取它来覆盖它。但似乎必须有更好的方法。

shell login environment-variables

35
推荐指数
1
解决办法
7171
查看次数

LC_COLLATE 是否(应该)影响字符范围?

Collat​​ion order throughLC_COLLATE不仅定义了单个字符的排序顺序,还定义了字符范围的含义。或者是吗?考虑以下片段:

unset LANGUAGE LC_ALL
echo B | LC_COLLATE=en_US grep '[a-z]'
Run Code Online (Sandbox Code Playgroud)

直观地说,B不是 in [a-z],所以这不应该输出任何东西。这就是 Ubuntu 8.04 或 10.04 上发生的事情。但是在一些运行 Debian lenny 或挤压的机器上,B可以找到,因为范围a-z包括排序顺序之间az排序顺序中的所有内容,包括大写字母BZ.

所有测试的系统都en_US生成了语言环境。我还尝试改变语言环境:在B上面匹配的机器上,{en_{AU,CA,GB,IE,US},fr_FR,it_IT,es_ES,de_DE}{iso8859-1,iso8859-15,utf-8}除了日语(任何可用的编码)和C/之外的每个可用语言环境(主要基于拉丁语:,还有中文语言环境)都会发生同样的情况POSIX

当您超越 ASCII 时,字符范围在正则表达式中意味着什么?为什么一方面某些 Debian 安装与其他 Debian 安装和 Ubuntu 之间存在差异?其他系统的行为如何?谁是对的,谁应该报告错误?

(请注意,我特别询问字符范围的行为,例如[a-z]en_US语言环境中,主要是在基于 GNU libc 的系统上。我不是在询问如何匹配小写字母或 ASCII 小写字母。)


在两台 Debian 机器上,一台B[a-z],一台不在,输出LC_COLLATE=en_US …

regular-expression locale

27
推荐指数
1
解决办法
1万
查看次数

方括号通配中的区分大小写

通常,bash globbing 区分大小写:

$ echo c*
casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py
$ echo C*
CarePackage.md ChocRippleCake.md Clips
Run Code Online (Sandbox Code Playgroud)

使用方括号似乎不会改变这一点:

$ echo [c]*
casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py
$ echo [C]*
CarePackage.md ChocRippleCake.md Clips
Run Code Online (Sandbox Code Playgroud)

如果使用连字符,它仍然不会改变它:

$ echo [c-c]*
casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py
$ echo [C-C]*
CarePackage.md ChocRippleCake.md Clips
Run Code Online (Sandbox Code Playgroud)

但是字母是穿插的:

$ echo [B-C]*
CarePackage.md casefix.pike cdless chalices.py charconv.py chocolate.pike ChocRippleCake.md circum.py clip.pike Clips cpustats.pike crop.pike cwk2txt.py
$ …
Run Code Online (Sandbox Code Playgroud)

shell bash wildcards locale

14
推荐指数
2
解决办法
2826
查看次数

设置 POSIX 语言环境的后果

我们正在使用几台以英语为工作语言的 Ubuntu 服务器;但是,在机器中设置了 en_US 语言环境后,我们会遇到 apt-cacher-ng 下载翻译文件的问题。一种解决方案是将语言环境更改为 POSIX。考虑到我们希望在所有系统中更改区域设置的所有选项。

将语言环境从 en_US 值更改为 POSIX 的系统会产生什么后果?除了值的变化之外,对 LC_* 有什么影响吗?

apt locale apt-cacher

5
推荐指数
1
解决办法
7329
查看次数

在 unicode 文本上使用 uniq

我想从带有叙利亚文字的文件中删除重复的行。源文件有 3 行,第 1 行和第 3 行相同。

$ cat file.txt 
????
????
????
Run Code Online (Sandbox Code Playgroud)

当我使用sortand 时uniq,结果假定所有 3 行都相同,这是错误的:

$ cat file.txt | sort | uniq -c
      3 ????
Run Code Online (Sandbox Code Playgroud)

将语言环境显式设置为叙利亚语也无济于事。

$ LC_COLLATE=syr_SY.utf8 cat file.txt | sort | uniq -c      
     3 ????
Run Code Online (Sandbox Code Playgroud)

为什么会这样?如果重要的话,我正在使用 Kubuntu 18 和 bash。

sort unicode uniq

5
推荐指数
2
解决办法
1120
查看次数

如何在 Python 中找到系统语言?

在 Python 3 中,有没有办法找出系统使用的语言?
即使是一个棘手的一个,虽然,这样的:从文件中读取偷偷摸摸目录,并找到字符串'ENG''FRE'文件的内容中...

system-information locale python3

4
推荐指数
1
解决办法
3421
查看次数

在 FreeBSD 上创建一个新的语言环境

我想在 FreeBSD 上创建一个新的语言环境。我以为我可以只复制现有的其中之一,/usr/share/locale但显然它并不那么简单。

首先,我只是创建了en_US.UTF-8语言环境的副本。

$ sudo cp -R /usr/share/locale/en_US.UTF-8 /usr/share/locale/en_DK.UTF-8
Run Code Online (Sandbox Code Playgroud)

我正在用 mosh 测试我的设置,所以使用标准en_US.UTF-8一切都很好:

$ LC_ALL=en_US.UTF-8 PATH_LOCALE=/usr/share/locale mosh xyz.example.org
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用新创建的en_DK.UTF-8语言环境,则会出现以下错误:

$ LC_ALL=en_DK.UTF-8 PATH_LOCALE=/usr/share/locale mosh xyz.example.org
The locale requested by LC_ALL=en_DK.UTF-8 isn't available here.
Running `locale-gen en_DK.UTF-8' may be necessary.

mosh-server needs a UTF-8 native locale to run.

Unfortunately, the local environment ([no charset variables]) specifies
the character set "US-ASCII",

The client-supplied environment (LC_ALL=en_DK.UTF-8) specifies
the character set "US-ASCII".

sh: warning: setlocale: LC_ALL: cannot …
Run Code Online (Sandbox Code Playgroud)

freebsd locale

3
推荐指数
1
解决办法
877
查看次数