UTF-8 লোকেল বহনযোগ্যতা (এবং ssh)


9

আমি আমার বেশিরভাগ সময় sshএডকে বিভিন্ন মেশিনে ব্যয় করি , যার সবকটিই আলাদা (কিছু এমবেডেড, কিছু রান লিনাক্স, কিছু রান বিএসডি, এবং সি।)। আমার নিজের স্থানীয় মেশিনে, তবে আমি ওএস এক্স ব্যবহার করি, যার অবশ্যই বিএসডি ভিত্তিক একটি ইউজারল্যান্ড রয়েছে। এই মেশিনগুলিতে আমার লোকেলটি en_GB.UTF-8 এ সেট করা আছে, যা উপলভ্য বিকল্পগুলির মধ্যে একটি:

% echo `sw_vers`
ProductName: Mac OS X ProductVersion: 10.8.2 BuildVersion: 12C60
% locale -a | grep -i 'en_gb.utf'
en_GB.UTF-8

আমি ব্যবহার করি এমন আরও বেশ কয়েকটি সক্ষম লিনাক্স সিস্টেমের সমতুল্য বিকল্প রয়েছে বলে মনে হয় তবে আমি লক্ষ করেছি যে লিনাক্সে নামটি কিছুটা আলাদা is

% lsb_release -d
Description: Debian GNU/Linux 6.0.3 (squeeze)
% locale -a | grep -i 'en_gb.utf' 
en_GB.utf8

এটি আমাকে অবাক করে তোলে: যখন আমি sshআমার ম্যাক থেকে একটি লিনাক্স মেশিনে প্রবেশ করি এবং এটি আমার সমস্ত LC_*ভেরিয়েবলগুলিকে সেই 'ইউটিএফ -8' প্রত্যয় সহ ফরোয়ার্ড করে, তখন লিনাক্স মেশিনটি কি এটি জিজ্ঞাসা করা হচ্ছে তা বুঝতে পারে? নাকি এটি আবার অন্য কোনও লোকালে পড়ে যাচ্ছে?

সম্পাদনা: আমি যা উল্লেখ করছি তার একটি উদাহরণ এখানে:

% ssh -v odin
...
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LC_ALL = en_GB.UTF-8
debug1: Sending env LC_COLLATE = en_GB.UTF-8
debug1: Sending env LC_CTYPE = en_GB.UTF-8
debug1: Sending env LC_MESSAGES = en_GB.UTF-8
debug1: Sending env LC_MONETARY = en_GB.UTF-8
debug1: Sending env LC_NUMERIC = en_GB.UTF-8
debug1: Sending env LC_TIME = en_GB.UTF-8
debug1: Sending env LANG = en_GB.UTF-8
odin:~ % locale | tail -1  # locale is set to .UTF-8 without error...
LC_ALL=en_GB.UTF-8
odin:~ % locale -a | grep 'en_GB.UTF-8'  # ... even though .UTF-8 isn't an option
odin:~ % 

উভয় ক্ষেত্রেই, এর আচরণের পেছনের প্রক্রিয়াটি কী এবং এটি কোনও নির্দিষ্ট সেট-আপের উপর নির্ভরশীল (যেমন, আমি কি জিএনইউ-ভিত্তিক কোনও ব্যাসিবক্স-ভিত্তিক সিস্টেমে একই আচরণ দেখতে পাব)?


সেখানে ব্যাখ্যা: superuser.com/questions/999133/… (মাধ্যাকর্ষণ থেকে উত্তর)। সুতরাং বিএসডি থেকে লিনাক্সে কোনও সমস্যা নেই। লিনাক্স থেকে (এটি ইউটিএফ -8 এর পরিবর্তে utf8 সংজ্ঞায়িত করে) বিএসডি-তে সমস্যা হতে পারে।
এবি

উত্তর:


0

এটি একটি আকর্ষণীয় প্রশ্ন, তবে আমি মনে করি যে এখানে ভেরিয়েবল কীভাবে সেট আপ করা হবে সে সম্পর্কে একটি ভুল ধারণা থাকতে পারে। যখন একটি সুরক্ষিত শেল সেশন শুরু করা হয় (ssh remotehost ), অন্য প্রান্তে যা ঘটে তা হ'ল পৃথক পরিবেশ সহ একটি নতুন শেল ইনস্ট্যান্টেশন। এটি বলার অভিনব উপায় যে সার্ভারটি একটি নতুন শেল শুরু করে। এই নতুন শেলটি আপনার মূল স্থানীয় শেলের মতো একই লোকেলের সাথে কনফিগার করা বা নাও হতে পারে।

যেমন

জিৎ: ~
$ প্রতিধ্বনি `স্থানীয় | গ্রেপ ল্যাঙ্গ` ::` তারিখ `
লং = en_US.UTF-8 :: সোমবার 3 ডিসেম্বর 07:04:00 সিইটি 2012

sh এসএস ফ্লাড
বন্যা: ~
$ প্রতিধ্বনি `স্থানীয় | গ্রেপ ল্যাঙ্গ` ::` তারিখ `
ল্যাং = nb_NO.UTF-8 ভাষা = nb_NO.UTF-8 :: মা। 03. দেশ। 06:59:33 +0100 2012

এটি প্রদর্শনের জন্য, আমি নরওয়েরিয়ানদের জন্য রিমোট শেলটিতে লোকেল সেট আপ করেছি lines / .bash_profile ফাইলে নিম্নলিখিত লাইনগুলি যুক্ত করে:

export     LANG=nb_NO.UTF-8
export LANGUAGE=nb_NO.UTF-8
export   LC_ALL=nb_NO.UTF-8

একইভাবে, আপনাকে রিমোট শেলটিতে পরিবেশ স্থাপন করতে হবে । অবশ্যই, অন্যান্য শেলগুলি জেড শেলের জন্য বিভিন্ন স্টার্টআপ ফাইল যেমন ~ / .zprofile পড়ে।

আমি যে ভ্রান্ত ধারণাটি সন্দেহ করলাম তা হ'ল স্থানীয় ভেরিয়েবল (সেটিংস) কোনওভাবেই এগিয়ে দেওয়া হয়নি। রিমোট শেলটির নিজস্ব সেটিংস রয়েছে। দূরবর্তী হোস্ট-এ উপলব্ধ ভাষাগুলি তালিকা জন্য, এটি একটি minimalistic busybox শেল বা একটি পূর্ণবিকশিত গনুহ অপারেটিং সিস্টেম হতে, ব্যবহার localeসঙ্গে কমান্ড -a(যেমন প্রশ্নে উল্লেখ) সুইচ। যে কোনও মুদ্রিত লাইন সেই পরিবেশের জন্য লোকেল সেটিং হিসাবে ব্যবহৃত হতে পারে।

প্রথম প্রশ্নের হিসাবে, কোনও শেল দিয়ে শুরু হওয়া ডিফল্ট লোকেল সাধারণত কেন্দ্রীয় জায়গায় যেমন / ইত্যাদি / প্রোফাইলে কনফিগার করা হয়। বেশিরভাগ লগইন শেলগুলি এই ফাইলটি প্রারম্ভকালে পড়ে।


2
লোকাল স্টাফ অবশ্যই পাঠানো হয়। /etc/ssh_configপ্রত্যেকটি মেশিনে যা আমি কখনও দেখেছি সেগুলি সংজ্ঞায়িত করে LANGএবং LC_*ডিফল্টরূপে সমস্ত হোস্টকে প্রেরণ করা হবে এবং এর ssh -vমতো কয়েকটি লাইন প্রকাশ করে debug1: Sending env LC_ALL = en_GB.UTF-8। অবশ্যই, যদি অন্য প্রান্তের শেল প্রোফাইলটি পরে তা ওভাররাইড করে তবে এটি অন্য জিনিস - তবে আমার কয়েকটি মেশিনে, এটি নয়
কেইন

পিএস: আমি উল্লেখ করছি তার আরও ভাল চিত্র সহ আমি আমার মূল পোস্টটি আপডেট করেছি
kine

স্বীকারোক্তিটি আমি এর আগে কখনও দেখিনি। আপনি যে মেশিনগুলি উল্লেখ করছেন, দেবিয়ান? সম্ভবত এই SSH env-ফরওয়ার্ডিং প্রক্রিয়া ব্যাখ্যা করবে। আমি এখনও মনে করি যে লোকেলের নামগুলি হুবহু মিলে যেতে হবে, কারণ এটি সনাক্ত করার জন্য লোকেল যথেষ্ট স্মার্ট হওয়ার কথা নয়। স্ট্রিংগুলি আলাদা হওয়ার কারণটি সি লাইব্রেরি বিএসডি এবং জিএনইউ / লিনাক্স ভিত্তিক মেশিনগুলির জন্য পৃথক। তারা একে অপরের সম্পর্কে জানেন না। তবে সম্ভবত আমি খুব সংশয়বাদী হয়েছি এবং স্থানীয় প্রোগ্রামটির এটিকে স্বয়ংক্রিয়ভাবে সামঞ্জস্য করার একটি উপায় রয়েছে।
23 Рахматуллин

এই অংশটি সম্পর্কে আমি কৌতূহলী ছিলাম - sshফরোয়ার্ডিং স্টাফগুলি ঘটনাবহুল, এটি কেবলমাত্র আমার লোকালটি যেভাবে সেট করা হয়েছে তার প্রসঙ্গ। আমি ঠিক জানি না কীভাবে অন্য প্রান্তের শেলটি আসলে কী করছে তা নির্ধারণ করতে পারি - আমি সাধারণত স্থানীয়ভাবে সেট করার চেষ্টা করে ত্রুটি পাই না (যদিও আমি এম্বেড থাকা ডিভাইসে কখনও কখনও করি), এবং ইউনিকোড পাঠ্য ইনপুট / ডিসপ্লেতে উপস্থিত হয় সাধারণত (?) কাজ করুন তবে আমি যে লোকালটি ব্যবহার করছি তা অবশ্যই সিস্টেমে উপস্থিত নেই। লিনাক্স ডিভাইসগুলির সাথে আমি সংযুক্ত বেশিরভাগ হ'ল ডেবিয়ান- বা উবুন্টু-ভিত্তিক, অন্যরা ইউসিপ্লিব / ব্যজিবক্স-ভিত্তিক (নেটওয়ার্ক অ্যাপ্লায়েন্সস এবং সি।)।
কিনে

0

নিম্নলিখিত কমান্ডের জন্যও ইউটিএফ -8 সমর্থনের নামটি বিভিন্ন সিস্টেমে কিছুটা আলাদা?

LC_ALL='' locale charmap  # UTF-8 (on Mac OS X 10.6.8)

আপনি অদ্ভুত লোকেল সংক্রান্ত সমস্যার সম্মুখিন হন তাহলে, এটা SSH ক্লায়েন্ট জানানোর জন্য নয় এমন পাঠাতে সাহায্য করতে পারে LC_*আউট মন্তব্য করে ভেরিয়েবল SendEnv LANG LC_*মধ্যে /etc/ssh_configউদাহরণস্বরূপ, (দেখুন, স্থির Mac OS X এর লায়ন এর, SSH হল UTF-8 সমস্যা এবং যা করতে পারেন: OS X এর লায়ন মধ্যে টার্মিনাল রিমোট মেশিনে লিখবেন না

আর একটি সমাধানের পদ্ধতিটি হ'ল:

# from: http://mod16.org/hurfdurf/?p=189
tjac wrote:
Actually the real problem that's causing this is that Mac OS 10.7 sets totally 
non-standard locale values, at least when you tweak some of the formats in
SysPrefs/Language&Text as I did.

If you type "locale" on your Mac terminal you should see pretty much the same as on 
other Unices (e.g. lots of en_US.UTF-8s if you prefer US English), but you don't. 
If these garbled settings get transferred to other Unix hosts by the SendEnv option 
they naturally do not know what's going on.

So if you want to fix it cleanly to allow for sshing to all kinds of remote hosts,
including those with older character sets, put the following lines in your 
~/.bash_profile on your Mac client machine.

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

Monday, September 12, 2011 at 22:54 #
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.