পাউন্ড (হ্যাশ) এর সাথে / ইত্যাদি / পরিবেশে পরিবেশ পরিবর্তনশীল the


10

উবুন্টু 12.04-এ, আমি একটি পরিবেশের পরিবর্তনশীল এর /etc/environmentমতো সংজ্ঞায়িত করেছি :

FOO="value_before#value_after"

আমি মানটি পরীক্ষা করার জন্য যখন সার্ভারে প্রবেশ করি তখন আমি এটি পাই:

$ env | grep FOO
FOO=value_before

আমি অনুমান করছি এটি #একটি মন্তব্য হিসাবে আচরণ করছে এবং এটিকে সরিয়ে দিচ্ছে, তবে এটি কাজ করে:

$ . /etc/environment
$ export FOO
$ env | grep FOO
FOO=value_before#value_after

আমি এইভাবে পালানোর চেষ্টা করেছি #:

FOO="value_before\#value_after"

তবে এটি কার্যকর হয় না, পরিবর্তে আমি কেবল এটি পাই:

FOO=value_before\

কীভাবে হ্যাশটিকে মূল্যের অংশ হিসাবে বিবেচনা করা যায় সে সম্পর্কে কোনও ধারণা? যেকোনো সাহায্যই অসাধারণ.

/etc/environmentফাইলগুলিতে আমি যে মূল্যবোধ চেষ্টা করেছি :

FOO='value_before#value_after'
FOO="value_before#value_after"
FOO='"value_before#value_after"'
FOO="value_before\#value_after"
FOO='value_before\#value_after'

এবং উপরের অন্যান্য বিভিন্ন সংমিশ্রণ। আপনি যখন সাধারনত শেলটিতে সেট করেন তখন এগুলি অনেকগুলি কাজ করবে। তবে তারা /etc/environmentফাইলটিতে কাজ করছে বলে মনে হয় না ।

উত্তর:


5

এটি পাম_েনভ মডিউল দ্বারা পঠিত। প্রদত্ত যে পাম_েনভ মডিউলটি তাদের "সরল" KEY = VALUE জোড়া হতে পারে (কোট লাগবে না) এবং # দ্বারা চিহ্নিত মন্তব্যেও সমর্থন করে, এটি ধরে নেওয়া হয়েছে যে একটি # এবং এটি একটি ভ্যালুতে অনুসরণ করা কিছু একটি মন্তব্য comment এছাড়াও, নোট করুন যে এটি পালানোর কোনও ধারণাকে সমর্থন করে না।

এই _parse_env_file ফাংশন থেকে নিম্নোক্ত স্নিপেট দেখা যায় pam_env.c

/* now find the end of value */
mark = key;
while(mark[0] != '\n' && mark[0] != '#' && mark[0] != '\0')
    mark++;
if (mark[0] != '\0')
    mark[0] = '\0';

উপরের স্নিপেটটি ভ্যালিউ অংশের প্রতিটি অক্ষরকে হাঁটা করে যতক্ষণ না এটি \n, #বা সন্ধান করে \0। এরপরে এটি অক্ষরের সাথে একটি দিয়ে ওভাররাইট করে \0

এটি কার্যকরভাবে #এবং সমস্ত কিছু বাদ দেয়। নোট: এই বৈশিষ্ট্য না একটি বাগ। এটি মন্তব্য বৈশিষ্ট্য।

সুতরাং, এই মুহুর্তে আপনার মানগুলি /etc/environmentএকটি #বা একটি \nবা \0মূল্যের মাঝখানে থাকতে পারে না cannot কোড থেকে এটি দেখতেও এমন মনে হয় যে কীগুলি আলফা-সংখ্যাসূচক হওয়া দরকার।


ওহ, পেরেক! বিস্তারিত ব্যাখ্যার জন্য ধন্যবাদ, আমি এটিকে গ্রহণযোগ্য সমাধান হিসাবে চিহ্নিত করেছি।
জয়মন

3

আমি কখনই এই সীমাবদ্ধতার কোনও উপায় খুঁজে পাইনি /etc/environment, ডকুমেন্টেশনে মনে হয় /etc/environmentএটি একটি সাধারণ পরিবেশ ফাইল:

This module can also parse a file with simple KEY=VAL pairs on separate 
lines (/etc/environment by default).

যার অর্থ হতে পারে এটি ডকুমেন্টেশনের\ অন্যান্য জায়গাগুলি সত্ত্বেও সম্ভবত এটি বলা সম্ভব বলে উদ্ধৃতি বা চরিত্র ব্যবহার করে মানগুলি থেকে বাঁচতে দেয় না :

(Possibly non-existent) environment variables may be used in values using 
the ${string} syntax and (possibly non-existent) PAM_ITEMs may be used in 
values using the @{string} syntax. Both the $ and @ characters can be 
backslash escaped to be used as literal values values can be delimited with ""

বা নাও হতে পারে :

The file is made up of a list of rules, each rule is typically placed on a
single line, [...] Comments are preceded with `#´ marks and extend to the 
next end of line.

যাইহোক, এই সীমাবদ্ধতাটি পেতে, আমি আমার উত্তরের পরিবেশের পরিবর্তনশীলগুলিকে এই উত্তরে আলোচিত/etc/profile.d হিসাবে একটি ফাইলে স্থানান্তরিত করেছি । আমি এখনও এই প্রশ্নটি উত্তরহীন বিবেচনা করি, তবে আমি নিশ্চিত করতে চেয়েছিলাম যে উত্তরোত্তর জন্য কোনও লিঙ্কযুক্ত কাজ রয়েছে।


1

পাম মডিউল "পাম_েনভ" দ্বারা পার্স করা হচ্ছে বলে # (যেমন এটি একটি মন্তব্য হিসাবে ধরা হয়েছে) এড়াতে / ইত্যাদি / পরিবেশের কোনও উপায় নেই এবং এটি কেইওয়াই = ভ্যাল জোড়গুলির একটি সাধারণ তালিকা হিসাবে বিবেচনা করে এবং সেট আপ করে পরিবেশ অনুসারে। এটি বাশ / শেল নয়, পার্সারটির পরিবর্তনশীল প্রসার বা অক্ষরগুলি অব্যাহতি দেওয়ার জন্য কোনও ভাষা নেই।


0

একক উদ্ধৃতি।

$ FOO='foo#bar'
$ echo $FOO
foo#bar

1
এটি প্রথম চেষ্টা করা মূল্যগুলির মধ্যে একটি ছিল যা আমি চেষ্টা করেছিলাম, যদিও এটি শেলটিতে কাজ করে, দুঃখের সাথে, এটি কাজ করে না /etc/environment, আমি আমার প্রশ্নটি মূল্যবোধের কয়েকটি উদাহরণ দিয়ে আপডেট করেছি।
জয়মন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.