= চিহ্নের আশেপাশের ফাঁকা স্থান কখন নিষিদ্ধ?


9

আমি জানি যে ~ / .bashrc এ কারও অবশ্যই অ্যাসাইনমেন্টে চিহ্নের আশেপাশে ফাঁকা স্থান রাখা উচিত নয়= :

$ tail -n2 ~/.bashrc 
alias a="echo 'You hit a!'"
alias b = "echo 'You hit b!'"

$ a
You hit a!

$ b
b: command not found

আমি মাইএসকিউএল কনফিগারেশন ফাইলটি পর্যালোচনা করছি /etc/my.cnfএবং আমি এটি পেয়েছি:

tmpdir=/mnt/ramdisk
key_buffer_size = 1024M
innodb_buffer_pool_size = 512M
query_cache_size=16M

আমি কীভাবে যাচাই করতে পারি যে =লক্ষণগুলির চারপাশের ফাঁকা স্থান কোনও সমস্যা নয়?

মনে রাখবেন যে এই প্রশ্নটি /etc/my.cnfফাইলটির সাথে সুনির্দিষ্ট নয় , বরং সাধারণভাবে NIX কনফিগার করা ফাইলগুলিতে। আমার প্রথম ঝুঁকিটি আরটিএফএমের দিকে তবে বাস্তবে man mysqlসমস্যাটির কোনও উল্লেখ করা হয়নি এবং যদি প্রতিটি মামলার জন্য আমাকে অনলাইনে শিকারে যেতে হয় তবে আমি আর কোথাও পাব না। কোন পরীক্ষা বা চেক করার সহজ উপায় আছে? যেমন দেখা যায়, একাধিক ব্যক্তি এই ফাইলটি সম্পাদনা করেছেন ( =লক্ষণগুলির জন্য পৃথক কনভেনশন ) এবং আমি তাদের সকলকেই কোনও স্থান ছাড়াই ব্যবহার করতে বাধ্য করতে পারি না, বা কনফিগার করা হয়েছে এমন এবং যা সঠিক হতে পারে তা যাচাই করতে আমি ক্রেজিও হতে পারি না।

সম্পাদনা: আমার উদ্দেশ্যটি বর্তমানে কনফিগার করা ফাইলগুলি সঠিকভাবে সম্পন্ন হয়েছে তা নিশ্চিত করা। নিজে ফাইল কনফিগার করার সময়, প্যাকেজ রক্ষণাবেক্ষণকারীরা সেখানে যা কিছু রাখবেন তা কনভেনশন নিয়ে আমি যাই।


2
"* NIX কনফিগারেশন ফাইলগুলি সাধারণভাবে" বলে কোনও জিনিস নেই। আমি যদি আমার কনফিগারেশন ফাইলে ফাঁকা স্থান দিতে চাই, তবে তাদের অনুমতি দেওয়ার জন্য আমি আমার প্রোগ্রামটি লিখব। যদি আমি চাই আমার কনফিগারেশন ফাইলটি সমান চিহ্নগুলির পরিবর্তে কলোন বা পাইপ ব্যবহার করে, তবে আমি সেগুলি ব্যবহার করতে আমার প্রোগ্রামটি লিখব। বাশের কোনও ফাঁকা জায়গা নেই। মাইএসকিএল তাদের অনুমতি দেয়।
স্তম্ভিত

উত্তর:


3

আমি আরও সাধারণ উপায়ে উত্তর দেব - পুরো "ইউনিক্স শেখার অভিজ্ঞতা " এর দিকে কিছুটা তাকিয়ে ।

আপনার উদাহরণে আপনি দুটি সরঞ্জাম ব্যবহার করেন এবং দেখুন ভাষা একই is ঠিক কখন ব্যবহার করবেন তা ঠিক অস্পষ্ট। অবশ্যই আপনি একটি পরিষ্কার কাঠামো আছে আশা করতে পারেন , তাই আপনি আমাদের এটি ব্যাখ্যা করতে বলুন। আশেপাশের জায়গার ক্ষেত্রে কেবল এবং উদাহরণ - অনেকগুলি একই রকম-তবে-বট-বেশ কয়েকটি ক্ষেত্রে রয়েছে। সেখানে হতে হয়েছে এটি একটি যুক্তি, ডান ?!
=

কিছু সরঞ্জাম , শেল, ডাটাবেস ইত্যাদির জন্য কীভাবে কোড লিখতে হয় তার নিয়মাবলী কেবলমাত্র এই বিশেষ সরঞ্জামটির প্রয়োজনের উপর নির্ভর করে ।

এর অর্থ হল যে সরঞ্জামগুলি সম্পূর্ণরূপে প্রযুক্তিগতভাবে সম্পূর্ণ স্বাধীন । আপনি যে যৌক্তিক সম্পর্কটি আশা করেন বলে মনে করি তা কেবল বিদ্যমান নয়

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

সম্পর্ক আপনি দেখতে পান একটি হল সাংস্কৃতিক জিনিস - এটা তন্ন তন্ন অংশ বাস্তবায়ন , কিংবা এ ভাষার সংজ্ঞা



সুতরাং, এখন আমরা থিয়োরিটি হ্যান্ডেল করেছি, বাস্তবে কী করব?

একটি বড় পদক্ষেপটি হ'ল এটি গ্রহণ করা যে আপনি প্রত্যাশিত ধারাবাহিকতাটির অস্তিত্ব নেই - কারণগুলি বোঝার সময় যা অনেক সহজ - আমি আশা করি তত্ত্বের অংশটি এতে সহায়তা করে।

যদি আপনার কাছে দুটি সরঞ্জাম থাকে তবে এটি একই কনফিগারেশন ভাষা ব্যবহার করে না (উদাহরণস্বরূপ, উভয় বাশ স্ক্রিপ্টিং), একটির বাক্য গঠনটির বিশদটি জেনে অন্যটি বোঝার ক্ষেত্রে খুব বেশি সহায়তা করে না;
সুতরাং, প্রকৃতপক্ষে, আপনাকে স্বাধীনভাবে বিশদটি সন্ধান করতে হবে । আপনি প্রতিটি জন্য রেফারেন্স ডকুমেন্টেশন কোথায় জানেন তা নিশ্চিত করুন ।

ইতিবাচক দিক থেকে, কিছু ধারাবাহিকতা রয়েছে যেখানে আপনি এটি প্রত্যাশা করেননি: একটি একক সরঞ্জাম (বা একই ভাষা ব্যবহার করে বিভিন্ন সরঞ্জাম) এর প্রসঙ্গে আপনি বাক্য গঠনটি সামঞ্জস্যপূর্ণ কিনা তা মোটামুটি নিশ্চিত করতে পারেন।
আপনার mysqlউদাহরণে, এর অর্থ আপনি ধরে নিতে পারেন যে সমস্ত লাইনের একই নিয়ম রয়েছে। তাই রুল "আগে স্থান এবং পরে =হয় প্রাসঙ্গিক নয় "।

কনফিগারেশন- বা কোনও সরঞ্জামের স্ক্রিপ্টিং ভাষা শেখা বা ব্যবহার করা কতটা কঠিন তার মধ্যে বিস্তর পার্থক্য রয়েছে । এটি কিছু কিছু হতে পারে " cmd-foo.conf এর তালিকাভুক্ত মান , প্রতি লাইনে একটি" " এটি একটি সম্পূর্ণ স্ক্রিপ্টিং ভাষা হতে পারে যা অন্য কোথাও ব্যবহৃত হয়। তারপরে কনফিগারেশন লেখার জন্য আপনার কাছে একটি শক্তিশালী সরঞ্জাম রয়েছে - এবং কিছু ক্ষেত্রে এটি কেবল দুর্দান্ত, অন্যদের ক্ষেত্রে আপনার সত্যই এটি প্রয়োজন হবে। কমপ্লেক্স সরঞ্জাম , অথবা সংশ্লিষ্ট সরঞ্জামের বৃহৎ famillies কখনও কখনও শুধু খুব ব্যবহার জটিল বিশেষ কনফিগারেশন ফাইল সিনট্যাক্স - (কিছু বিখ্যাত উদাহরণ আছে এবং )। অন্যরা সাধারণ স্ক্রিপ্টিং ব্যবহার করে


sendmailvim
ভাষাটিকে বেস হিসাবে ব্যবহার করে এবং বিশেষ প্রয়োজনগুলি সমর্থন করার জন্য সেই ভাষাটি প্রসারিত করে , কিছু সময় জটিল উপায়ে, যেমন ভাষা ব্যবহার করে। এটি কোনও ডোমেন-নির্দিষ্ট ভাষার ( ডিএসএল ) খুব নির্দিষ্ট ক্ষেত্রে হবে ।


এটি সেই উত্তর হিসাবে গৃহীত যা প্রশ্নের দৃষ্টিকোণ থেকে উত্তরটির সর্বাধিক সম্বোধন করে। ধন্যবাদ!
dotancohen

20

বাশ এমন একটি রেখার ব্যাখ্যা করবে যা পাঠ্যের পরে =একটি ভেরিয়েবলের অ্যাসাইনমেন্ট হিসাবে পাঠাবে, তবে এটি এমন একটি রেখাকে ব্যাখ্যা করবে যা একটি আর্গুমেন্ট সহ একটি কমান্ড হিসাবে একটি স্থানের পরে পাঠ্য থাকবে।

var=assignment বনাম command =argument

বাশ স্ক্রিপ্টগুলি এই নীতিতে কাজ করে যে স্ক্রিপ্টের সমস্ত কিছুই যেন আপনি এটিকে কমান্ড লাইনে টাইপ করেছেন।

কনফিগারেশন ফাইলগুলিতে যা bash(বা অন্য শেল) দ্বারা ব্যাখ্যা করা হয় না , এটি পার্সার দ্বারা নির্ধারিত হবে যা কনফিগারেশন ফাইলটি পড়তে ব্যবহৃত হয়। কিছু পার্সার স্পেস নেবে, কিছু নেবে না। সেক্ষেত্রে আবেদনটি শেষ up ব্যক্তিগতভাবে, আমি যে কনভেনশনটি ডিফল্ট কনফিগারেশন ফাইল ব্যবহার করেছি তা দিয়ে যাই।


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

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

দুর্ভাগ্যক্রমে, তাদের কিছু ভেঙে গেছে। এজন্যই আমি জিজ্ঞাসা করছি!
dotancohen

শেলগুলিতে, সমান স্থানের কাছাকাছি কখনই স্থান ব্যবহার করবেন না। যে কোনও ক্ষেত্রে এটি শেল নয়, সর্বদা ফাঁকা স্থান ব্যবহার করুন। আপনি গ্রেপ: 'গ্রেপ "[^] = [^]" / ইত্যাদি / *' ব্যবহার করে বিদ্যমান ফাইলগুলি অডিট করতে পারেন এমন একটি = এমন কোনও ফাইল নেই যেখানে ফাঁকা স্থান নেই।
qris

2
@ ডটানকোহেন (১) যে কোনও কনফিগার ফাইলের জন্য, কমপক্ষে একটি সেটিংস থাকা উচিত যা এটি ভেঙে গেছে কিনা তা যাচাই করা বরং তার চেয়ে সহজ easy কোনও কনফিগার ফাইল ফাইল ফাঁকা দেওয়ার অনুমতি দেয় কিনা, এটি পুরোপুরি ধারাবাহিকভাবে করা উচিত। (২) আপনি সর্বদা একটি অ্যাপ্লিকেশন ডাউনলোড করতে এবং এটিতে যে ডিফল্ট কনফিগারগুলি রয়েছে সেটি চেক করতে পারেন। (৩) আপনি সর্বদা ফাঁকা জায়গা ছেড়ে দিতে পারেন leave a = bসর্বদা গ্রহণযোগ্য নাও হতে পারে তবে a=bসর্বদা কাজ করা উচিত।
টু-বিট অ্যালকেমিস্ট

4

.bashrc বাশের জন্য কনফিগার ফাইল ছাড়া আর কিছুই নয়, যেমন my.cnf, php.ini, httpd.conf বা লঞ্চ করা প্লিস্ট। প্রত্যেকটির নিজস্ব বাক্য বিন্যাস রয়েছে, বাশ-এর ​​ফাঁকা স্থানের অ্যাসাইনমেন্ট থেকে শুরু করে এক্সএমএল ট্যাগ স্যুপ থেকে শুরু করা হয়েছে (বাইনারি সংস্করণও রয়েছে: -ও)

কোনও দৃ conven় কনভেনশন নেই, এবং আপনি ইতিমধ্যে ইউনিক্সের প্রাইম ডাইরেক্টিভটি আবিষ্কার করেছেন: ফাইন ম্যানুয়াল পড়ুন ।


1
.bashrcহয় না ব্যাশ জন্য একটি কনফিগ ফাইল। .bashrcহ'ল একটি শেল স্ক্রিপ্ট যা প্রতিবার ব্যাশ প্রক্রিয়া শুরু হওয়ার সাথে সাথে ব্যাশ চলে। এটি ব্যাশ কনফিগার করতে ব্যবহার করা যেতে পারে তবে এটি অন্যান্য ধরণের অন্যান্য জিনিসগুলিতেও ব্যবহার করা যেতে পারে: এটি কোনও স্ক্রিপ্ট, কোনও কনফিগার ফাইল নয়।
জোশ

3

কিছু প্রোগ্রাম কনফিগারেশন ফাইলের একটি চেক দেয়, উদাহরণস্বরূপ:

postfix check

অন্যথায় আপনি সংগ্রহস্থলগুলি থেকে মূল কনফিগার ফাইলগুলি পেতে এবং সেগুলি বর্তমানের সাথে পৃথক করে তুলনা করতে পারেন।


প্রকৃতপক্ষে, দেখে মনে হচ্ছে এটি মূল সমস্যাটির সমাধান করে address ধন্যবাদ!
dotancohen

2

=সাইন এর আশেপাশের ফাঁকা স্থানগুলি সর্বদা সমস্যা হয় যখন আপনি কোনও অ্যাসাইনমেন্ট করেন bash। এখানে কোনও ব্যতিক্রম নেই, আপনি =বৈধ সহজ অ্যাসাইনমেন্ট (কোনও প্রসারণ, কোনও পাটিগণিত, কোনও অ্যারে অ্যাসাইনমেন্ট) পেতে না চাইলে আপনাকে অবশ্যই চারপাশের সমস্ত স্থান সরিয়ে ফেলতে হবে bash

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

একটি উদাহরণ হল mysql, এর আরআর স্ক্রিপ্টে এটির /etc/init.d/mysqldজন্য একটি পার্সার রয়েছে my.cnf:

# Try to find basedir in /etc/my.cnf
  conf=/etc/my.cnf
  print_defaults=
  if test -r $conf
  then
    subpat='^[^=]*basedir[^=]*=\(.*\)$'
    dirs=`sed -e "/$subpat/!d" -e 's//\1/' $conf`
    for d in $dirs
    do
      d=`echo $d | sed -e 's/[  ]//g'`
      if test -x "$d/bin/my_print_defaults"
      then
        print_defaults="$d/bin/my_print_defaults"
        break
      fi
      if test -x "$d/bin/mysql_print_defaults"
      then
        print_defaults="$d/bin/mysql_print_defaults"
        break
      fi
    done
  fi

সেখানে একটি ব্যতিক্রম আছে (( var = 12 ))বা var=( value )অথবা $((var = 12))অথবা${var[foo = 12]}
Stéphane Chazelas

@ স্টাফেনচাজেলাস: এই প্রশ্নে এই মামলাগুলির বিষয়ে তথ্য দেয়নি, তথ্য যোগ করুন। ধন্যবাদ।
cuonglm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.