我在通过 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
。