ডিরেক্টরি নামের জন্য একটি পিছনে ফরোয়ার্ড স্ল্যাশ প্রয়োজন কি অনুশীলন?


9

আমি আমার বাশ স্ক্রিপ্টের ব্যবহারকারীকে আর্গুমেন্ট হিসাবে একটি ডিরেক্টরি পথ পাস করতে বলতে চাই। নীচের কোনটি একটি ভাল প্রোগ্রামিং অনুশীলন?

  • ব্যবহারকারী একটি অনুচ্ছেদ / (ফরোয়ার্ড স্ল্যাশ) প্রবেশ করান
  • কোনও ব্যবহারকারী অনুগ্রহ করে / (ফরোয়ার্ড স্ল্যাশ) প্রবেশ না করে

3
নোট করুন যে rsyncপিছনের উপস্থিতির উপর নির্ভর করে খুব গুরুত্বপূর্ণ উপায়ে আলাদাভাবে আচরণ করে /এবং তাই কিছু ক্ষেত্রে আপনি ধারাবাহিকতার জন্য স্বাভাবিক রাখতে চান এবং অন্য ক্ষেত্রে আপনি ব্যবহারকারী যা বলেছেন তা বাস্তবায়নের জন্য আপনি পরিষ্কারভাবে যেতে চান (যদি তারা জানতেন যে তারা কথা বলছেন rsync)।
sh1

আর একটি যা আমাকে সম্প্রতি অবাক করেছে তা হ'ল ডিরেক্টরিতে যদি একটি সিমলিংক হয় তবে তার ls -l dirথেকে আলাদা আচরণ করে ves ls -l dir/dir
ফ্লিম 10

উত্তর:


27

সেরা অনুশীলন হয় না ধরে নেওয়া হয়।

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

ট্রেলিং স্ল্যাশ যুক্ত করা উচিত কিনা তা স্মরণ রাখার চেয়ে ব্যবহারকারীর পক্ষে আর কিছুই বিরক্তিকর নয়।


6
সম্পুরক: উপযুক্ত কম্যান্ড-লাইন সরঞ্জামগুলির সাথে সর্বদা পার্স পাথ - dirname, basenameএবং readlink। একটি খুব সাধারণ সমস্যা এর ${path##*/}প্রতিস্থাপন হিসাবে ব্যবহার করা হচ্ছে basename, তবে যদি পথটি স্ল্যাশ দিয়ে শেষ হয় যা শেষ পাথ এলিমেন্টের পরিবর্তে খালি স্ট্রিংটি ফেরত দেয়।
l0b0

1
ইউটিলিটি ক্লাস ব্যবহারের জন্য +1। আজকাল বেশিরভাগ ফ্রেমওয়ার্কগুলি সহজেই এটি করতে পারে যখন আমি পাথগুলি একত্রিত করার কথা বলি তখন বিকাশকারীরা চাকাটি পুনরায় নতুনভাবে আবিষ্কার করতে দেখেছি say
যৌক্তিকগীত

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

আমার সম্প্রতি আরএসইএনসি ব্যবহারের জন্য ব্যবহারকারীর ইনপুট থেকে একটি পিছনের স্ল্যাশ যাচাই করা দরকার (কারণ এটি এই বিষয়গুলির সংবেদনশীল)। @ ক্রিসএফ যেমন উল্লেখ করেছে, অনুমান করা ভাল না অনুশীলন। আমি অনুমান করার একটি কৃপণ উপায় হিসাবে নিম্নলিখিতটি নিয়ে হাজির হয়েছি: ${STR}$(printf \\$(printf '%03o' $(($(printf '%d' "'${STR:(-1)}")==47?0:47))))আমিও এটি স্পষ্টতার জন্য একটি সংক্ষেপে নথিভুক্ত করেছি: বাশে ট্র্যাশিং স্ল্যাশ যুক্ত বা অপসারণ করুন
জন মার্ক মিচেল

10

যেহেতু বাশ একাধিক স্ল্যাশ উপেক্ষা করে, তাই আপনি নিরাপদে ধরে নিতে পারেন যে ব্যবহারকারীর পথে কোনও পিছনে স্ল্যাশ প্রবেশ করা হয়নি এবং নিজেই একটি স্ল্যাশ যুক্ত করা হয়নি।

cat /etc/hosts

একই মত

cat /////etc//////////hosts

সুতরাং আপনার স্ক্রিপ্টটি দেখতে দেখতে পারে:

echo -n "enter path: "
read path
if [ -f $path/myfile ]
then
  echo "found myfile!"
else
  echo "nope"
fi

এবং ব্যবহারকারী কোনও পথে / পথে পথে প্রবেশ করছে কিনা তা আপনার চিন্তার দরকার নেই।


5
নিত: এটি bashআচরণ নয় , কর্নেল এটি করে।
ব্লারফ্ল

7

দেরী জন পোস্টেলের আরএফসি 760 এর বিভাগ 3.2 তে কিছু দুর্দান্ত পরামর্শ ছিল যা এখানে প্রযোজ্য:

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


3

ধারণাগতভাবে, স্ল্যাশ নামের অংশ নয়। স্ল্যাশ শুধুমাত্র নামের মধ্যে একটি সীমাবদ্ধ। আমার হোম-ডির হ'ল / হোম / স্টেফান এবং না / হোম / স্টেফান /।

যদি আপনি কোনও পিছনের স্ল্যাশ আশা করেন না, তবে এমএমকিউ ইতিমধ্যে উল্লিখিত হিসাবে আপনি যদি একটি থাকে তবে ব্যর্থ হবেন না। তবে আপনি সহজেই নাম এবং vars একসাথে আঠালো করতে পারেন, কারণ আপনার স্ল্যাশের উদ্ধৃতি দিতে হবে না:

a="/home"
b="stefan"

dir=$a/$b

0

ডিরেক্টরিটি অবশ্যই অনুসরণযোগ্য স্ল্যাশ না থাকা প্রয়োজন কনসোলে ইন্টারেক্টিভ ব্যবহারের জন্য অত্যন্ত বিরক্তিকর: টিএবির সাথে স্বয়ংক্রিয়ভাবে সমাপ্তি ডিরেক্টরিগুলির জন্য স্বয়ংক্রিয়ভাবে একটি পিছনের স্ল্যাশ যুক্ত করে।

সুতরাং আপনাকে অবশ্যই অবশ্যই অনুমতি প্রদান করতে হবে যে পিছনে স্ল্যাশ সহ ডিরেক্টরিগুলি নির্দিষ্ট করা আছে।

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