কীভাবে ডটফাইলগুলি সিস্টেম-অজোনস্টিক রাখবেন?


21

কাজের কারণে আমি সম্প্রতি ওএস এক্স ব্যবহার শুরু করেছি এবং লিনাক্সের মতো একই অভিজ্ঞতা পেতে হোমব্রিউ ব্যবহার করে এটি সেট আপ করেছি।

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

ডটফাইলে হিসাবে, আমি অন্যগুলির মধ্যে উল্লেখ করছি, .bash_profilesবা এর সাথে .bash_alias


আমি গিট শাখা দিয়ে এটি করেছি। আমার কাছে ফ্রিবিএসডি, জেন্টু এবং উবুন্টুর জন্য একটি আছে। তবে এটি আদর্শ নয়।
রাফেল অ্যারেনস

@ রাফেলআহরেনস এ জাতীয় শাখা-ভিত্তিক সমাধানটি এড়াতে চাই কারণ এটি ডাইভারেজ হওয়ার ঝুঁকিপূর্ণ।
k0pernikus

হ্যাঁ, আপনি যখন সিস্টেমের নির্দিষ্ট জিনিসগুলিকে বিশেষ ফাইলে রাখেন তখন আপনি এটিকে কিছুটা সহজ করে তুলতে পারেন। তবে আমি যেমন বলেছি আদর্শ নয়।
রাফেল অ্যারেনস

stackoverflow.com/questions/394230/… আপনি ওএস এক্স-এ ডারউইনের জন্য চেক করতে পারেন
রাফেল আহরেন্স

আমার পদ্ধতির মূলত if (exists rcfile.local); source rcfile.local; endifউপযুক্ত আরসি ফাইলটিতে অনুবাদ হয়েছে down মূল আরসি ফাইলটি আমি সিস্টেমে অজ্ঞেয়বাদী রাখার চেষ্টা করি, যখন .localসংস্করণটিতে সিস্টেম নির্দিষ্ট সেটিংস রয়েছে। আপনি যদি এটি একক রেপোতে চান তবে আপনার কাছে সিস্টেম ডায়ার থাকতে পারে এবং সঠিক ডিরেক্টরিতে rcfile.local সিমিলিংক করতে পারেন।
jw013

উত্তর:


22

ডটফিলগুলি যথাসম্ভব পোর্টেবল রাখুন এবং ওএস নির্ভর সেটিংস বা কোনও সরঞ্জামের একটি বিশেষ সংস্করণ প্রয়োজন এমন স্যুইচগুলি এড়ান, যেমন আপনি যদি সমস্ত সিস্টেমে জিএনইউ সফ্টওয়্যার ব্যবহার না করেন তবে জিএনইউ সিনট্যাক্স এড়ান।

আপনি সম্ভবত এমন পরিস্থিতিতে চলে যাবেন যেখানে সিস্টেম নির্দিষ্ট সেটিংস ব্যবহার করা বাঞ্ছনীয়। সেক্ষেত্রে স্বতন্ত্র সেটিংস সহ একটি স্যুইচ স্টেটমেন্ট ব্যবহার করুন:

case $(uname) in
  'Linux')   LS_OPTIONS='--color=auto --group-directories-first' ;;
  'FreeBSD') LS_OPTIONS='-Gh -D "%F %H:%M"' ;;
  'Darwin')  LS_OPTIONS='-h' ;;
esac

স্বেচ্ছাসেবী অ্যাপ্লিকেশনগুলির কনফিগারেশন ফাইলগুলিতে বিভিন্ন বিকল্পের প্রয়োজন হলে, আপনি অ্যাপ্লিকেশনটি সামঞ্জস্যতা সুইচ বা অন্য পদ্ধতি সরবরাহ করে কিনা তা পরীক্ষা করতে পারেন। জন্য vim, উদাহরণস্বরূপ, আপনি সংস্করণ এবং patchlevel সমর্থন পুরোনো সংস্করণগুলি বা একটি আলাদা বৈশিষ্ট্য সেট দিয়ে কম্পাইল সংস্করণ বৈশিষ্ট্য দেখতে পারেন না। থেকে স্নিপেট উদাহরণ .vimrc:

if v:version >= 703
  if has("patch769")
    set matchpairs+=“:”
  endif
endif

uname -sভালো হয় uname। uname এর অর্থ ইউনিক্স নাম।
স্টাফেন চেজেলাস

1
@ স্টাফেনচাজলাস এটি হ'ল এটি কেবল সিস্টেমগুলির জুড়েই গ্যারান্টিযুক্ত এবং আমি সর্বদা এটিকে ফেলে দিতে -sপারি?
মার্কো

1
হ্যাঁ, unameকয়েক দশক ধরে এটি করার একক উপায় ছিল এবং এটি পসিক্স দ্বারা নির্দিষ্ট করা হয়। আসল uname(পিডাব্লুবি ইউনিক্সে) কোনও বিকল্প নেয় নি।
স্টাফেন চেজেলাস

@ স্টেফেন চ্যাজেলাস স্পষ্টির জন্য ধন্যবাদ, আমি -sএই উত্তরটি সরিয়ে দিয়েছি এবং আমি আমার ভবিষ্যতের স্ক্রিপ্টগুলির জন্য এটি মনে রাখব।
মার্কো

এটি একটি অপেক্ষাকৃত ছোটখাটো বিশদ এবং আপনার উদাহরণ দ্বারা বর্ণিত বিন্দু থেকে বিচ্যুত হয় না, তবে কি ভিমার্কে এই উক্তিগুলি setসত্যই ইউ + 201 সি এবং ইউ + ২০১২ এর পরিবর্তে ইউ + 201 সি হবে?
একটি সিভিএন

3

আপনি যদি কেবলমাত্র মৃত্যুদন্ড কার্যকর করা ফাইল, যেমন .বাশ_ প্রোফাইলগুলি এবং বন্ধুবান্ধব সম্পর্কেই উদ্বিগ্ন হন unameতবে কোডটি যে সিস্টেমটি চালিত হয় তার ভিত্তিতে পার্থক্য নির্ধারণের জন্য আপনি উদাহরণ ব্যবহার করে পালিয়ে যেতে সক্ষম হতে পারেন ।

উদাহরণস্বরূপ , সম্পূর্ণরূপে অনির্ধারিত এবং এই সাবধানতার সাথে যে আমার কাছে লিনাক্সে থাকলে এটি চেষ্টা করার জন্য আমার কাছে কোনও OS এক্স নেই:

alias ll='ls -lFA'

এবং ম্যাক ওএস এক্সে:

alias ll='ls -lFAx'

(যেখানে -xওএস এক্সের এমন lsকিছু করা যায় যা জিএনইউ ডিফল্টরূপে করে) তবে তাদের এ জাতীয় কিছুতে একত্রিত করা যেতে পারে:

OS="$(uname -s)"
if test "$OS" = "Darwin"; then
    alias ll='ls -lFAx'
    # ...other OS X-specific things go here...
else if test "$OS" = "Linux"; then
    alias ll='ls -lFA'
    # ...other Linux-specific things go here...
fi
# ...generic things go here...

শুধুমাত্র প্রয়োজন তারপর যে uname -sবেশিরভাগ একই ভাবে কাজ (এটা, যুক্তিসঙ্গতভাবে POSIX-Y এবং যেহেতু উভয় সিস্টেম উচিত uname -s POSIX দ্বারা প্রয়োজন বোধ করা হয় (ধন্যবাদ মার্কো জন্য এই ইশারা )), এবং যে শেল স্ক্রিপ্ট শাখাবিন্যাস জন্য সিনট্যাক্স একটি স্ট্রিং তুলনা উপর ভিত্তি করে একই। আপনি সম্ভবত অন্যান্য মানদণ্ডের উপর ভিত্তি করেও পরীক্ষা করতে পারেন; উদাহরণস্বরূপ, আপনি / ইত্যাদি / lsb_re দয়া করে অনুসন্ধান করতে পারেন, / proc / sys / কার্নেল / ostype এ "লিনাক্স" রয়েছে কিনা তা পরীক্ষা করতে পারেন, বা আপনি যা পরীক্ষা করতে পারেন তা পরীক্ষা করতে পারেন।


@ রাফেলআহরেন্স এটি Darwin, আমি খালি পরীক্ষা করেছি।
k0pernikus

@ রাফেলআহরেন্স যেমনটি আমি লিখেছি, জিনিসগুলি চেষ্টা করার জন্য আমার কাছে কোনও ওএস এক্স নেই, সুতরাং অপেক্ষাকৃত তুচ্ছ বিবরণে একটি অপেক্ষাকৃত তুচ্ছ বিবরণে অনেক সময় ব্যয় না করে আমি ধারণাটি দেখানোর জন্য একটি বুনো অনুমান নিয়েছিলাম।
একটি সিভিএন

উইকিপিডিয়া থেকে রেসকিউ এন.ইউইকিপিডিয়া.র.উইকি / ইউনামে অন্য কেউ যদি উইন্ডোজ বা অন্য স্টাফের জন্য বাশ করতে চায়।
রাফেল আহরেন্স

1
আনম -oস্যুইচ পসিক্স নয় এবং বহু সিস্টেমে ব্যর্থ হয়, যেমন সোলারিস। -sPOSIX এবং সবচেয়ে উপযুক্ত উপায়ে বাধ্যতামূলক on আইইইই স্ট্যান্ড 1003.1
মার্কো

2
OSTYPEপসিক্স শেলটিতে পাওয়া যায় না। এটি একটি ডিফল্ট ফ্রিবিএসডি ইনস্টলেশনের ক্ষেত্রে উদাহরণস্বরূপ ব্যর্থ হবে এবং এটি কেবলমাত্র .bashrcবা তে ব্যবহৃত হতে পারে .zshrc। এটা নির্ভরযোগ্যভাবে কাজ করে না .profile, .aliasপরিবর্তে বিশেষ শেল এর বৈশিষ্ট্য, সেখানে আবার প্রতি সিস্টেমে উপলব্ধ হতে নিশ্চিত করা হয় না এর উপর নির্ভর করার, ইত্যাদি যেহেতু আমরা compatibiliy সম্পর্কে এখানে কথা বলছি, আমি নিরাপদ পথ যেতে পরামর্শ চাই।
মার্কো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.