Tôi đang sử dụng một hệ thống từ xa, nơi mã hóa khác cho tên tệp (và cho địa phương của người dùng) đã được sử dụng. Và điều này gây ra một số vấn đề.
Các vấn đề được giải quyết bằng cách khớp các cài đặt ngôn ngữ
Trước khi tôi chuyển sang các vấn đề với tên tệp, tôi muốn nói rằng một số vấn đề mã hóa với phiên ssh như vậy đã được giải quyết bằng cách đặt ngôn ngữ từ xa sao cho phù hợp với ngôn ngữ địa phương , cụ thể là
- các vấn đề với việc chỉnh sửa dòng lệnh (Tôi đã nhấn Backspace trice, nhưng vì trên máy chủ của tôi, mã hóa là UTF-8 và ở đầu từ xa - KOI8-R, hoặc có lẽ là CP1251, một số mã hóa Cyrillic 8 bit, điều này đã không xảy ra ' t ảnh hưởng đến chuỗi Cyrillic của tôi một cách chính xác):
[imz@localhost ~]$ locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
[imz@localhost ~]$ echo привет
привет
[imz@localhost ~]$ echo при
при
[imz@localhost ~]$ ssh -vv ivan@example.com
Last login: Fri Nov 25 13:44:56 2011 from NN.NN.NN.NN
[ivan@dell ~]$ locale
LANG=ru_RU.KOI8-R
LC_CTYPE="ru_RU.KOI8-R"
LC_NUMERIC="ru_RU.KOI8-R"
LC_TIME="ru_RU.KOI8-R"
LC_COLLATE="ru_RU.KOI8-R"
LC_MONETARY="ru_RU.KOI8-R"
LC_MESSAGES=POSIX
LC_PAPER="ru_RU.KOI8-R"
LC_NAME="ru_RU.KOI8-R"
LC_ADDRESS="ru_RU.KOI8-R"
LC_TELEPHONE="ru_RU.KOI8-R"
LC_MEASUREMENT="ru_RU.KOI8-R"
LC_IDENTIFICATION="ru_RU.KOI8-R"
LC_ALL=
[ivan@dell ~]$ echo привет
привет
[ivan@dell ~]$ echo при
привÐ
[ivan@dell ~]$ export LANG=ru_RU.UTF-8
[ivan@dell ~]$ echo привет
привет
[ivan@dell ~]$ echo при
при
[ivan@dell ~]$
- vấn đề với sự hiểu biết chính xác về độ nhạy cảm trường hợp đối với các chuỗi được xử lý; bây giờ nó sẽ hoạt động, sau khi tôi đặt ngôn ngữ:
[ivan@dell ~]$ echo привет | fgrep -i ВЕТ
привет
[ivan@dell ~]$
nhưng điều này sẽ không hoạt động trước đây.
Vấn đề nhỏ với tên tập tin
Các tiện ích in ra tên tệp (mà bạn nhớ, được lưu trữ từ xa trong một mã hóa khác) sẽ không in chúng nguyên văn, nhưng chúng ảnh hưởng đến các dấu hỏi cho các ký tự nước ngoài:
[ivan@dell ~]$ find ~mama/Desktop/ -iname '*.xls'
/home/mama/Desktop/????????? ????????.xls
/home/mama/Desktop/???????? ??? ???????????? (1).xls
/home/mama/Desktop/???????? ??? ???????????? (2).xls
/home/mama/Desktop/???????? ??? ???????????? (3).xls
/home/mama/Desktop/???????? ??? ????????????.xls
[ivan@dell ~]$ find ~mama/Desktop/ -iname '*.xls' -print
/home/mama/Desktop/????????? ????????.xls
/home/mama/Desktop/???????? ??? ???????????? (1).xls
/home/mama/Desktop/???????? ??? ???????????? (2).xls
/home/mama/Desktop/???????? ??? ???????????? (3).xls
/home/mama/Desktop/???????? ??? ????????????.xls
[ivan@dell ~]$
Vấn đề tương tự được thể hiện bởi ls
, và như vậy. Nhưng điều này có thể dễ dàng khắc phục bằng cách chuyển chúng dưới dạng chuỗi cho các lệnh in (không nhận thức được vấn đề với mã hóa không khớp của tên tệp và của thiết bị đầu cuối - hoặc vì bất kỳ lý do gì, nhưng nó hoạt động):
[ivan@dell ~]$ find ~mama/Desktop/ -iname '*.xls' -print0 | xargs -0 -n 1 echo
/home/mama/Desktop/Êðåäèòíûé ïîðòôåëü.xls
/home/mama/Desktop/ÀÄÐÅÑÀÒÛ äëÿ ïîçäðàâëåíèé (1).xls
/home/mama/Desktop/ÀÄÐÅÑÀÒÛ äëÿ ïîçäðàâëåíèé (2).xls
/home/mama/Desktop/ÀÄÐÅÑÀÒÛ äëÿ ïîçäðàâëåíèé (3).xls
/home/mama/Desktop/ÀÄÐÅÑÀÒÛ äëÿ ïîçäðàâëåíèé.xls
[ivan@dell ~]$
Ngoài ra, thực tế là chúng không thể đọc được không phải là rất khó chịu, bởi vì tôi luôn có thể nối thêm | recode -f cp1251..utf-8
vào cuối lệnh.
Vấn đề khó chịu
Vấn đề thiết yếu là việc chọn (bằng chuột) tên tệp trong thiết bị đầu cuối và dán chúng không hoạt động:
[ivan@dell ~]$ diff '/home/mama/Desktop/ÀÄÐÅÑÀÒÛ äëÿ ïîçäðàâëåíèé (1).xls' '/home/mama/Desktop/ÀÄÐÅÑÀÒÛ äëÿ ïîçäðàâëåíèé (3).xls'
diff: /home/mama/Desktop/ÀÄÐÅÑÀÒÛ äëÿ ïîçäðàâëåíèé (1).xls: No such file or directory
diff: /home/mama/Desktop/ÀÄÐÅÑÀÒÛ äëÿ ïîçäðàâëåíèé (3).xls: No such file or directory
[ivan@dell ~]$
Tôi đã nhận thấy một đại diện thoát của tên tệp trong đầu ra của stat
, vì vậy tôi có thể chọn và dán nó (bên $''
trong bash ):
[ivan@dell ~]$ diff '/home/mama/Desktop/\300\304\320\305\321\300\322\333 \344\353\377 \357\356\347\344\360\340\342\353\345\355\350\351 (1).xls' '/home/mama/Desktop/\300\304\320\305\321\300\322\333 \344\353\377 \357\356\347\344\360\340\342\353\345\355\350\351 (3).xls'
diff: /home/mama/Desktop/\300\304\320\305\321\300\322\333 \344\353\377 \357\356\347\344\360\340\342\353\345\355\350\351 (1).xls: No such file or directory
diff: /home/mama/Desktop/\300\304\320\305\321\300\322\333 \344\353\377 \357\356\347\344\360\340\342\353\345\355\350\351 (3).xls: No such file or directory
[ivan@dell ~]$ diff $'/home/mama/Desktop/\300\304\320\305\321\300\322\333 \344\353\377 \357\356\347\344\360\340\342\353\345\355\350\351 (1).xls' $'/home/mama/Desktop/\300\304\320\305\321\300\322\333 \344\353\377 \357\356\347\344\360\340\342\353\345\355\350\351 (3).xls'
Files /home/mama/Desktop/ÀÄÐÅÑÀÒÛ äëÿ ïîçäðàâëåíèé (1).xls and /home/mama/Desktop/ÀÄÐÅÑÀÒÛ äëÿ ïîçäðàâëåíèé (3).xls differ
[ivan@dell ~]$
Vì vậy, câu hỏi là:
Làm thế nào để thuận tiện làm việc với tên tệp từ xa (trên ssh ), trong một mã hóa khác nhau?
Sẽ thật tuyệt nếu chúng có thể đọc được, và có thể lựa chọn và có thể đọc được (và cũng có thể đánh máy bằng bàn phím của tôi và sau đó có thể hoàn thành bằng Tab trong bash ;
Tôi đang làm việc trong urxvt trong X.org trên Linux trên máy chủ địa phương, và nó bash trên Linux vào cuối từ xa.
LC_ALL
, đó là ghi đè khẩn cấp cho các địa phương. ĐặtLANG
nếu bạn muốn đặt mặc định cho tất cả các danh mục hoặc nếu không, hãy đặt danh mục chính xác mà bạn quan tâm, ví dụ:LC_CTYPE
cho bộ ký tự và mã hóa.