আমি কীভাবে "বাশ-এক্স" (ডিবাগ মোড) সর্স স্ক্রিপ্টগুলিতে পুনরাবৃত্তি করব?


10

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

লিনাক্স: 3.2.25

ওএস এক্স: 3.2.48

লিনাক্সে পুনরাবৃত্তি না করা আচরণের একটি অংশ এখানে দেওয়া হয়েছে:

bash -l -x -c 'echo 1'
# ... snip ...
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/vim.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/vim.sh
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/which-2.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/which-2.sh
# ... snip ...

লক্ষ্য করুন কীভাবে /etc/profile.d/vim.sh উত্সাহিত হয় তবে এর আদেশগুলি মুদ্রিত হয় না। আপগ্রেড না করে কি কোনও কার্যকারিতা রয়েছে? সংস্করণ পার্থক্যের কারণে এটি ঘটে?

উত্তর:


1

set -xমূল ফাইলের অন্য কোথাও (অন্য সমস্ত ফাইলের জন্য একটির প্রয়োজন হয়) কাজ করা উচিত। বিকল্পভাবে, [[ !-z "$DEBUG" ]] && set -xপ্রতিটি ফাইলের মতো কিছু উপস্থাপন করুন এবং এর সাথে কল করুন DEBUG=1 script.sh।


মূল ফাইলটি কোথায়? এটি কি প্ল্যাটফর্মটি স্বাধীন?
— কেলভিন

"রুট ফাইল" দিয়ে আমি সহজেই বোঝাতে চাইছি যে ফাইলটি আপনি শেলটিতে কল করছেন এবং যা অন্য ফাইলগুলি আমদানি করছে। আমার উদাহরণে, মূল ফাইলটি স্ক্রিপ্ট.শ হবে
— এমকেইটো

1
তবে স্ক্রিপ্টটি চালানোর আগে বাশ লগইন সূচনা ঘটে। স্ক্রিপ্টে "সেট-এক্স" চালাতে দেরি হয়েছে। নিজে চেষ্টা করে দেখুন - "বাশ-এল-এক্স স্ক্রিপ্ট.শ" চালান। আপনার স্ক্রিপ্টের আদেশগুলি চালুর আগে আপনি জিনিসগুলি ঘটতে দেখবেন।
— কেলভিন

কেন আপনি পৃথিবীতে স্ক্রিপ্ট চালাবেন bash -l? এটি ইন্টারেক্টিভ শেলগুলির জন্য বোঝানো হয়েছে। স্ক্রিপ্ট কোনও ইন্টারেক্টিভ শেল নয়।
— এমকেইতো

3
দয়া করে আরও কিছুটা মুক্তচেনা হয়ে উঠুন - স্পষ্টতই বাশের স্রষ্টারা ভেবেছিলেন এটি কার্যকর হবে। আমি দেখতে পেয়েছি 2 টি ব্যবহার (কমপক্ষে): 1) আপনি চালাতে চান ssh user@host 'bash -l -c command'যাতে আপনি যথাযথ .েউ বোঝাই হয়ে যান। 2) আপনি একজন সিসাদমিন এবং আপনার স্ক্রিপ্টটি চালানোর আগে থ্রি স্ক্রিপ্টগুলি কী করছে তা সমস্যা সমাধান করতে চান - এটি আপনাকে দেখাবে। কখনও কখনও আপনি জানতে চান যে কোন এনভির ভেরিয়েবল সেট করা হচ্ছে। bash -l -x
— কেলভিন

0

যেহেতু আপনি স্ক্রিপ্টগুলি সরবরাহ করছেন এবং কার্যকর করছেন না, তাই মূল স্ক্রিপ্টে আপনার প্রথম কমান্ডটি "সেট-এক্স" হওয়া উচিত

এখন সমস্ত উত্সযুক্ত স্ক্রিপ্টগুলি আরও বেশি ডিবাগে চলবে। মনে রাখবেন আপনি যখন কোনও স্ক্রিপ্ট উত্স করবেন, এটি আপনার বর্তমান শেলটিতে চলবে, তাই আপনি যদি একবার -x সেট করেন তবে এটি সমস্ত উত্সের স্ক্রিপ্টগুলির জন্য ভাল।

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