Eval $ (বিড়াল ফাইলের নাম) উত্স ফাইল নাম হিসাবে একই?


9

কিছু বাশ ফাংশন নিয়ে কাজ করা, আমি source ...কমান্ড জানতাম না , তাই eval $(cat ...)পরিবর্তে আমি ব্যবহার করেছি । এখন আমি ভাবছি, আমি কি এর প্রতিটি ব্যবহার পরিবর্তন করব, বা এটি কেবল একই ফাংশন?

তারা এখন একইরকম কাজ করছে বলে মনে হয় তবে পরে কিছু বিভ্রান্তিমূলক পার্থক্য হতে পারে, আমি কেবল তা জানতে চাই।

উত্তর:


6

eval $(cat ...)সব ক্ষেত্রে কাজ করে না। উদাহরণস্বরূপ, লাইন ব্রেকগুলি $(cat ...)সামগ্রীর মাধ্যমে প্রক্রিয়া করার আগে একটি একক জায়গায় রূপান্তরিত হয় eval। এটি প্রায়শই লুপ এবং এখানে নথির মতো মাল্টি লাইন স্টেটমেন্টগুলি ভেঙে দেয়।

উদাহরণস্বরূপ উভয় পদ্ধতি সহ নিম্নলিখিত ফাইলটি চেষ্টা করুন:

for i in 1 2 3; do
 echo $i
done

cat<<EOF
a
b
c
EOF

4
আপনি যদি উক্তি ব্যবহার করেন তবে সাদা স্থান অক্ষত থাকবে:eval "$(cat file)"
গ্লেন জ্যাকম্যান

1
হ্যাঁ, এটিও কাজ করা উচিত। তবে যদি কাউকে কোডটি পরিবর্তন করতে হয় তবে আমি পছন্দ করি sourceএটি বিশেষত এটির জন্য তৈরি একটি আদেশ।
ফ্লোরিয়ান ডিয়েচ

9

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

  • যখন আপনি একটি স্ক্রিপ্ট উৎস, বিভিন্ন বিশেষ শেল ভেরিয়েবল পরিবর্তন করা হবে, প্রধানত BASH_SOURCE, BASH_LINENOএবং FUNCNAMEঅ্যারে। এগুলি ত্রুটি বার্তা এবং ডিবাগিং মুদ্রণের জন্য দরকারী।

  • আপনি returnকমান্ড ( help return) কমান্ড দিয়ে স্রোসযুক্ত স্ক্রিপ্ট থেকে ফিরে আসতে পারেন । খোলার সাথে, আপনি যে প্রভাব পাবেন না। এবং অনুরূপভাবে একটি রিটার্ন ট্র্যাপ বিবর্তনের জন্য ট্রিগার করা হবে না।

  • কোনও স্ক্রিপ্ট উত্সাহিত করার সময়, আপনি এটিতে যুক্তিগুলি পাস করতে পারেন। আপনি যে খোলার সাথে এটি করতে পারবেন না।

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


1

এখানে উত্সটি কীভাবে উত্সাহিত হয় এবং কার্যকর হয় তার একটি চমৎকার সংক্ষিপ্তসার রয়েছে: http://www.unix.com/shell-programming-scriptting/54347-bash-shell-exec-eval-source-looking-help-:30:30.html

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


3
সম্পূর্ণরূপে স্পর্শকাতর: $(cat file)$(< file)
ব্যাশের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.