আপনার কাছে গিট উপলভ্য থাকলে এবং মূল নামগুলিতে আন্ডারস্কোর ব্যবহার করতে না পারার সীমাবদ্ধতার সাথে যদি আপনি ঠিক থাকেন তবে আপনি git configসাধারণ উদ্দেশ্যে INI পার্সার / সম্পাদক হিসাবে ব্যবহার করতে পারেন ।
এটি কী / মান জুটির চারপাশ থেকে পার্সিং পরিচালনা করবে =এবং তুচ্ছ শ্বেতস্পেস ফেলে দেবে, এবং আপনি মন্তব্যগুলি পাবেন ( ;এবং উভয় #) এবং মূলত বিনামূল্যে জোর করে লিখুন। আমি .iniনীচে নীচে ওপি'র ইনপুট এবং পছন্দসই আউটপুট (ব্যাশ এসোসিয়েটিভ অ্যারে) এর জন্য একটি সম্পূর্ণ কার্যকারী উদাহরণ অন্তর্ভুক্ত করেছি ।
যাইহোক, একটি কনফিগার ফাইল দেওয়া
; mytool.ini
[section1]
inputdir = ~/some/dir
enablesomefeature = true
enablesomeotherfeature = yes
greeting = Bonjour, Monde!
[section2]
anothersetting = 42
… তবে আপনার কেবলমাত্র একটি দ্রুত এবং নোংরা সমাধানের প্রয়োজন হয় এবং বাশ সহযোগী অ্যারেটিতে সেটিংস থাকার ধারণার সাথে আপনি বিবাহিত না হয়ে থাকেন, আপনি যতটা সামান্য ছাড়িয়ে যেতে পারেন:
eval $(git config -f mytool.ini --list | tr . _)
# or if 'eval' skeeves you out excessively
source <(git config -f mytool.ini --list | tr . _)
যা sectionname_variablenameবর্তমান পরিবেশে পরিবেশগত ভেরিয়েবল তৈরি করে । এটি অবশ্যই কাজ করে যদি আপনি বিশ্বাস করতে পারেন যে আপনার মানগুলির কোনওটিতেই কোনও সময়কাল বা শ্বেত স্পেস থাকবে না (আরও শক্তিশালী সমাধানের জন্য নীচে দেখুন)।
অন্যান্য সহজ উদাহরণ
টাইপিং সংরক্ষণে শেল ফাংশন ব্যবহার করে স্বেচ্ছাসেবী মানগুলি আনা হচ্ছে:
function myini() { git config -f mytool.ini; }
এখানে একটি নামও ঠিক আছে, তবে এটি শেল স্ক্রিপ্টে সাধারণত প্রসারিত হয় না [ 1 ], এবং যাইহোক যাই হোক না কেন বাশ ম্যান পৃষ্ঠা অনুসারে , "প্রায় প্রতিটি উদ্দেশ্যেই," [ ২ ] শেল ফাংশন দ্বারা উপন্যাসকে বহিষ্কার করা হয় ।
myini --list
# result:
# section1.inputdir=~/some/dir
# section1.enablesomefeature=true
# section1.enablesomeotherfeature=yes
# section2.anothersetting=42
myini --get section1.inputdir
# result:
# ~/some/dir
সঙ্গে --typeবিকল্প, আপনি যা করতে পারেন "canonicalize" হিসাবে ইন্টিজার, Booleans, অথবা পাথ (স্বয়ংক্রিয়ভাবে বিস্তৃত নির্দিষ্ট সেটিংস ~):
myini --get --type=path section1.inputdir # value '~/some/dir'
# result:
# /home/myuser/some/dir
myini --get --type=bool section1.enablesomeotherfeature # value 'yes'
# result:
# true
সামান্য আরও শক্তিশালী দ্রুত এবং নোংরা উদাহরণ
বর্তমান পরিবেশের mytool.iniমতো সমস্ত ভেরিয়েবলগুলি SECTIONNAME_VARIABLENAMEকী মানগুলিতে অভ্যন্তরীণ সাদা স্থান সংরক্ষণ করে উপলভ্য করুন :
source <(
git config -f mytool.ini --list \
| sed 's/\([^.]*\)\.\(.*\)=\(.*\)/\U\1_\2\E="\3"/'
)
সেড এক্সপ্রেশনটি ইংরেজিতে কী করছে is
- একটি পিরিয়ড অবধি অ-পিরিয়ড অক্ষরগুলির একগুচ্ছ সন্ধান করা
\1, তখনকার মতো মনে রাখা
- সমান চিহ্ন পর্যন্ত অক্ষরের গুচ্ছ সন্ধান করা, এটি হিসাবে
\2এবং মনে রাখা
- সমান চিহ্ন হিসাবে সমস্ত অক্ষর সন্ধান করা
\3
- পরিশেষে, প্রতিস্থাপন স্ট্রিং মধ্যে
- বিভাগটির নাম + ভেরিয়েবলের নাম হ'ল আপার-কেসড এবং
- মান অংশটি ডাবল-কোটেড হয়, যদি এর মধ্যে অক্ষর থাকে যা শেলটির সাথে বিশেষ অর্থযুক্ত থাকে যদি উদ্বুদ্ধ না হয় (যেমন সাদা অংশ)
\Uএবং \Eপ্রতিস্থাপন স্ট্রিং সিকোয়েন্স (যা উপরের ক্ষেত্রে যে প্রতিস্থাপন স্ট্রিং এর অংশ) গনুহ হয় sedএক্সটেনশান। ম্যাকোস এবং বিএসডি-তে আপনি -eএকই প্রভাব অর্জন করতে কেবল একাধিক এক্সপ্রেশন ব্যবহার করবেন ।
বিভাগের নামগুলিতে এম্বেড করা উক্তি এবং শ্বেত স্পেসের সাথে ডিল করা (যা git configমঞ্জুরি দেয়) পাঠকের অনুশীলন হিসাবে ছেড়ে দেওয়া হয়েছে।:)
বাশ এসোসিয়েটিভ অ্যারেতে কী হিসাবে বিভাগের নামগুলি ব্যবহার করা
প্রদত্ত:
; foo.ini
[foobar]
session=foo
path=/some/path
[barfoo]
session=bar
path=/some/path
এটি ওপি সিড প্রতিস্থাপনের এক্সপ্রেশনটিতে কিছু ক্যাপচারকে পুনরায় সাজিয়ে ফলাফলটি জিজ্ঞাসা করবে এবং জিএনইউ সিড ছাড়াই সূক্ষ্মভাবে কাজ করবে:
source <(
git config -f foo.ini --list \
| sed 's/\([^.]*\)\.\(.*\)=\(.*\)/declare -A \2["\1"]="\3"/'
)
আমি ভবিষ্যদ্বাণী করি একটি বাস্তব-বিশ্বের .iniফাইলের উদ্ধৃতি দেওয়ার সাথে কিছু চ্যালেঞ্জ থাকতে পারে তবে এটি প্রদত্ত উদাহরণের জন্য কাজ করে। ফলাফল:
declare -p {session,path}
# result:
# declare -A session=([barfoo]="bar" [foobar]="foo" )
# declare -A path=([barfoo]="/some/path" [foobar]="/some/path" )