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


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.