终端设置改变“sort -g”的行为

终端设置改变“sort -g”的行为

我在通过 ssh 运行(即常规数字排序)命令时遇到问题sort -g。示例在包含 4 行的文件上正确运行:

sort -g foo
9.1e-02
0.1
0.5
10.

cat foo
0.5
0.1
9.1e-02
10.

我最近安装了 Ubuntu 20.04,并且正在使用默认终端。当我从该终端 ssh 到上面使用的同一台机器时,我得到了错误的结果:

sort -g foo
0.1
0.5
9.1e-02
10.

这似乎是由我 ssh 的终端引起的错误。我尝试在“首选项”中找到一个选项,但没有找到任何相关内容。请告诉我我应该添加哪些其他信息。

编辑1

locale对于运行良好的系统和终端:

LANG=en_US.UTF-8
LC_CTYPE=pl_PL
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE=POSIX
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

对于有错误的那个:

LANG=en_US.UTF-8
LC_CTYPE=pl_PL
LC_NUMERIC=pl_PL.UTF-8
LC_TIME=pl_PL.UTF-8
LC_COLLATE=POSIX
LC_MONETARY=pl_PL.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=pl_PL.UTF-8
LC_NAME=pl_PL.UTF-8
LC_ADDRESS=pl_PL.UTF-8
LC_TELEPHONE=pl_PL.UTF-8
LC_MEASUREMENT=pl_PL.UTF-8
LC_IDENTIFICATION=pl_PL.UTF-8
LC_ALL=

答案1

根本原因是使用将小数点定义为逗号的区域设置(例如波兰或德国),而输入数据中却有小数点。


LC_ALL=C sort -g
一种解决方法是使用而不是 ,使排序独立于当前区域设置sort -g

答案2

问题在于 Ubuntu 默认是转发locale设置。注释掉SendEnv LANG LC_*中的行就足够了/etc/ssh/ssh_config

相关内容