আমি কীভাবে আমার শেল স্ক্রিপ্টের ফাইল হ্যান্ডলিং দৃ rob়তা পরীক্ষা করতে পারি?


11

আমি একটি শেল স্ক্রিপ্ট লিখেছি যা কিছু "নিয়মিত" ফাইলের নাম পরিচালনা করে তবে আমি পড়েছি কেন আমার শেল স্ক্রিপ্টটি সাদা স্থান বা অন্যান্য বিশেষ চরিত্রগুলিতে শ্বাসরোধ করে? এবং কেন আপনার এলএসের আউটপুটটি বিশ্লেষণ করবেন না এবং আমি এটি আরও দৃ rob় হতে চাই এবং কোনও বৈধ ফাইলের নাম (এবং / অথবা ডিরেক্টরি নাম) হ্যান্ডেল করব। আমি আমার স্ক্রিপ্টের বিপরীতে চালানোর জন্য কীভাবে ফাইল এবং ডিরেক্টরিগুলির একটি পরীক্ষা-বিছানা তৈরি করতে পারি?

উত্তর:


11

খেলতে পৃথক ডিরেক্টরি তৈরি করুন (পরে পরিষ্কার করার স্বাচ্ছন্দ্যের জন্য, মূলত); $TMPDIRএটি সেট করা থাকলে এর মানটি ব্যবহার করে , অন্যথায় /tmp:

mkdir "${TMPDIR-/tmp}/testing"
cd "${TMPDIR-/tmp}/testing"

পৃথক পৃথক ফাইল তৈরি করুন তবে শ্বেত স্পেসের কারণে একে অপরের সাথে একইরূপে উপস্থিত হয় (স্থান, ট্যাব, নিউলাইন, ক্যারেজ রিটার্ন, ব্যাকস্পেস):

touch -- a b 'a ' 'b ' 'a b' 'a  b' $'a\bb'
touch -- a$'\xe2\x80\x82'b a$'\xe2\x80\x83'b a$'\t'b a$'\n'b a$'\r'b

উপরের জন্য ক্রেডিট প্যাট্রিক । দুটি হেক্স কোড কোড হ'ল ইউটিএফ -8 স্পেস বিভাজক যা বাদাম এবং মাটন হিসাবে পরিচিত ; "দ্বিপাক্ষিক প্রসঙ্গে এটি হোয়াইট স্পেস হিসাবে কাজ করে এবং (তারা) মিরর করা হয় না The

একটি সরল ফাইল এবং এটি একটি গ্লোব হিসাবে বিবেচনা করা হলে প্রথমে প্রসারিত হবে একটি তৈরি করুন:

touch -- x '[x]' 

ওপ্পাস কিউ ভুম্বলিকে উপরের ক্রেডিট ।

একটি অনুরূপ শিরা মধ্যে:

touch -- 'a?b' 'a*b'

উপরে মন্তব্যগুলি dave_thompson_085 জন্য ক্রেডিট ।

touch -- foo\`echo\ malicious\`bar

গডলিজিককে উপরের কৃতিত্ব

শেল প্রসঙ্গে মূল্যায়ন করা হলে এমন একটি ফাইলের নাম যা আলাদা কিছুতে প্রসারিত হবে (এবং সম্ভাব্য স্বেচ্ছাচারিত প্রয়োগ!):

touch '$( echo boom )'

ব্যবহার করুন:

touch -- single\'quote double\"quote back\\slash

উদ্ধৃতিগুলি ছাড়াই উদ্ধৃতিতে কোনও ফাইলের নাম রাখার প্রচেষ্টা ধরা।

touch -- -a -b -c -r -R - a=x

উপরের জন্য কৃতিত্ব স্টাফেন চেজেলাসকে

একটি নামযুক্ত পাইপ এবং সিমিলিংক তৈরি করুন ("নিয়মিত" নয় এমন ফাইলগুলি তৈরি করতে):

mkfifo fifo
ln -s a alink

তাদের ডিরেক্টরিতে টোকেন ফাইলের সাথে বিভিন্ন নামের মধ্যে অন্তর্ভুক্ত থাকা বিভিন্ন সাদা জায়গা রয়েছে এমন সাব-ডিরেক্টরিগুলি তৈরি করুন:

mkdir subdir "subdir 1" "subdir 2" "subdir 3 " subdir$'\n'4
touch subdir/file0 "subdir 1"/file1 "subdir 2"/file2 "subdir 3 "/file3 subdir$'\n'4/file4

কেবলমাত্র ফাইলগুলি *(অপসারণে সমস্যাযুক্ত), কেবলমাত্র একটি (নিয়মিত!) স্থান, একটি মৃত প্রতীকী লিঙ্ক, একটি প্রতীকী লিঙ্ক যা নিজেই loুকে পড়ে এবং মূল পর্বের ডিরেক্টরিতে ফিরে একটি লিঙ্ক সহ একটি উপ-ডিরেক্টরি যুক্ত ফাইল ফাইল তৈরি করুন :

touch -- '*' '**' '***' ' '

ln -s /does/not/exist dead

ln -s loop loop

mkdir subdir_with_link
(cd subdir_with_link && ln -s .. parent)

আরও বিবিধ ফাইল নাম। শেষ দুটি হ'ল "ভগ্নাংশ স্ল্যাশ" এবং "বিভাগ স্ল্যাশ" এর জন্য ইউনিকোড।

touch -- '(' '!' '!!'  $'\xe2\x81\x84' $'\xe2\x88\x95'

স্কট থেকে ধারণা :

touch -- '-' '--' ';' '&' '|' '<' '>' '$' ')' '{' '}' = \\ '!' '#' '{a,b}'

এমন কিছু অক্ষর যা কিছু লোকেলগুলিতে নিরীহ তবে অন্যদের জন্য বিপজ্জনক:

touch $'X\xa0Y' # non-breaking space in iso8859-1 which is considered
                # "blank" and "space" in some locales

touch $'\xa3\x5c' $'\xa3\x60' # α and ε in BIG5 or BIG5-HKSCS charset, but
                              # �\ and �` in ASCII

কিছু লোকালে একই অক্ষরগুলি:

touch   # sorts the same in GNU locales, order non-deterministic.

ফাইলগুলি যে .[!.]* *গ্লোব থেকে মুক্তি পায় (কখনও কখনও লুকানো এবং অ গোপনীয় ফাইল উভয় প্রসারিত করতে ব্যবহৃত হয়):

touch ..foo ...

একটি "মন্তব্য" মন্তব্যের বিড়ম্বনা বিভ্রান্ত করছে; আপনি কি বিভিন্ন কমান্ডগুলি করছে তার ব্যাখ্যা ব্যাখ্যা করতে বলছেন?
জেফ শ্যাচলার

1
হ্যাঁ, দয়া করে আপনার তৈরি করা পরীক্ষাগুলির বর্ণনা সর্বাধিক সুস্পষ্ট, কিছু এর মতো যা এতে ইউনিকোড চরিত্রের মতো লাগে, তা নয়।
মুরু

1
আমি যোগ করব a?bএবং a*b(অবশ্যই উদ্ধৃত)। @ মুরু: বাইট সিকোয়েন্সগুলি E2 80 82/83 হ'ল ইউ + 2002 এন স্পেস এবং ইউ + 2003 ইএম স্পেসের ইউটিএফ -8 এনকোডিং
ডেভ_থম্পসন_085

সেখানে কাজের কিছু অশুভ প্রতিভা: -সি
ব্যবহারকারী 207673

এটি খেলতে আকর্ষণীয় হতে পারে -এবং --, যদিও, স্ক্রিপ্টের প্রয়োজনীয়তার উপর নির্ভর করে, সম্ভবত নেতৃত্ব ছাড়াই তাদের অ্যাক্সেস করা অসম্ভব হওয়া উচিত ./। আর আমি বিস্মিত অ উল্লিখিত glob শেল বিশেষ অক্ষর তাই কয়েক আছে, মত ;, &, |, <, >, $, (, ), {, }, =, \, !, এবং #- উদাহরণস্বরূপ, {a,b}
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.