`সেট -x` কী করে?


259

এটিতে নিম্নলিখিত লাইনটি সহ আমার একটি শেল স্ক্রিপ্ট রয়েছে:

[ "$DEBUG" == 'true' ] && set -x

15
একবার দেখুন:help -m set | less
সাইরাস

4
টিপটির জন্য ধন্যবাদ help -m set। ওই কাজগুলো. আমি man setজিজ্ঞাসা করার আগে চেষ্টা করেছিলাম , তবে উবুন্টুতে রয়েছেNo manual entry for set
ওলে

2
@ ওলে, ব্যাশে setতৈরি করা হয়েছে যাতে man bashআপনি যদি এটি শেল বুলেটিন কম্যান্ডস বিভাগে খুঁজে পান। মানুষ যখন পৃষ্ঠা দেখছেন আপনি সম্ভবত এই regexp জন্য অনুসন্ধান দ্বারা এটি তিড়িং লাফ পারেন: \bset \[
ব্যবহারকারী5910

উত্তর:


364

set -xশেলটির একটি মোড সক্ষম করে যেখানে সমস্ত সম্পাদিত কমান্ডগুলি টার্মিনালে মুদ্রিত হয়। আপনার ক্ষেত্রে এটি স্পষ্টভাবে ডিবাগিংয়ের জন্য ব্যবহৃত হয়েছে, এটি একটি সাধারণ ব্যবহারের ক্ষেত্রে set -x: প্রতিটি কমান্ড কার্যকর হওয়ার সাথে সাথে এটি মুদ্রণ করা যদি আপনাকে প্রত্যাশার মতো কাজ না করে তবে স্ক্রিপ্টের নিয়ন্ত্রণ প্রবাহটি কল্পনা করতে সহায়তা করতে পারে।

set +x এটি অক্ষম করে।


5
কীভাবে আবার সেই বৈশিষ্ট্যটি অক্ষম করবেন?
feedc0de

85
@ ড্যানিয়েল ব্রুনার: set +xএটি অক্ষম করে।
জন জুইনক

2
এটি খুব দরকারী! আমার ইচ্ছা যদি এর আগে কেউ আমাকে জানিয়েছিল। এর মতো আরও আকর্ষণীয় কৌশলগুলি কি স্ক্রিপ্টিংয়ের ক্ষেত্রে আমাদের মেটা দক্ষতা বাড়িয়ে তুলতে পারে?
শিক্ষার্থী

7
@ স্টুডেন্ট: set -eযখনই কোনও ত্রুটি দেখা দেয় (এবং স্পষ্টভাবে পরিচালনা করা হয় না) তখন আপনার স্ক্রিপ্টের শীর্ষে স্ক্রিপ্টটিকে ত্রুটিযুক্ত করে প্রস্থান করবে। আমি ডিফল্টর কাছে এটি অপরিসীম পছন্দনীয় বলে মনে করি, যা উইলি-নিলি চালিয়ে যেতে হয় (ভিজ্যুয়াল বেসিকের কুখ্যাত On Error Resume Next) এর মতো ।
জন জুইনক

1
দুর্ভাগ্যক্রমে, জনজউইনক set -eএর খুব অবাঞ্ছিত পার্শ্ব প্রতিক্রিয়া রয়েছে যে কোড কোড পর্যালোচনাটিকে প্রায় অসম্ভব করে তোলে (কারণ প্রদত্ত লাইনের আচরণ নির্ভর করে কল স্ট্যাক কী কী - তার উপর যদি কোনও ফাংশন "চেকড" প্রসঙ্গে বলা হয়, set -eঅক্ষম করা হয় সেই অনুরোধ এবং এটির পরিবর্তে সমস্ত কিছুর জন্য)। বাশফ্যাঙ্ক # 105অনুশীলনগুলি দেখুন ।
চার্লস ডাফি

77

set -x

কমান্ড, কেস কমান্ড, সিলেক্ট কমান্ড এবং কমান্ডের জন্য পাটিগণিত এবং তাদের যুক্তি বা যুক্ত শব্দ তালিকার প্রসারিত হওয়ার পরে এবং মৃত্যুদন্ড কার্যকর হওয়ার আগে মুদ্রণ করে commands PS4 ভেরিয়েবলের মান প্রসারিত হয় এবং ফলস্বরূপ মানটি কমান্ড এবং এর প্রসারিত আর্গুমেন্টের আগে মুদ্রিত হয়।

[ উত্স ]

উদাহরণ

set -x
echo `expr 10 + 20 `
+ expr 10 + 20
+ echo 30
30

set +x
echo `expr 10 + 20 `
30

উপরে উদাহরণস্বরূপ এর ব্যবহার চিত্রিত করে set -x। এটি ব্যবহার করা হলে, উপরের পাটিগণিতের এক্সপ্রেশনটি প্রসারিত করা হয়েছে। আমরা দেখতে পেলাম কীভাবে ধাপে ধাপে একটি সাইন রেখা মূল্যায়ন করা হয়েছে।

  • প্রথম পদক্ষেপ exprমূল্যায়ন করা হয়েছে।
  • দ্বিতীয় পদক্ষেপ echoমূল্যায়ন করা হয়েছে।

সেট সম্পর্কে আরও জানতে link এই লিঙ্কটি দেখুন

যখন এটি আপনার শেল স্ক্রিপ্টে আসে,

[ "$DEBUG" == 'true' ] && set -x

যখন আপনার এক্সপ্লোরেশন মোড হিসাবে নির্বাচন করা হয়েছিল তখন আপনার স্ক্রিপ্ট কিছু অতিরিক্ত তথ্য লাইন মুদ্রণ করছিল DEBUG। Aতিহ্যগতভাবে লোকেরা ডিবাগ মোড সক্ষম করতে ব্যবহৃত হয় যখন কোনও স্ক্রিপ্ট যেমন withচ্ছিক যুক্তির সাথে ডাকা হয়-d



6

-u: ডিফল্টরূপে অক্ষম। যখন সক্রিয় করা হয় তখন একটি কনফিগার্ড ভেরিয়েবল ব্যবহার করার সময় একটি ত্রুটি বার্তা প্রদর্শিত হয়।

-v: ডিফল্টরূপে নিষ্ক্রিয়। সক্রিয়করণের পরে, তথ্য আউটপুট হওয়ার আগে তথ্যের মূল বিষয়বস্তু প্রদর্শিত হবে (পরিবর্তনশীল রেজোলিউশন ছাড়াই)।

-x: ডিফল্টরূপে নিষ্ক্রিয়। যদি সক্রিয় হয়, কমান্ডটি চালুর আগে কমান্ড সামগ্রী প্রদর্শিত হবে (ভেরিয়েবল রেজোলিউশনের পরে, ++ চিহ্ন রয়েছে)।

নিম্নলিখিত পার্থক্য তুলনা করুন:

/ # set -v && echo $HOME
/root
/ # set +v && echo $HOME
set +v && echo $HOME
/root

/ # set -x && echo $HOME
+ echo /root
/root
/ # set +x && echo $HOME
+ set +x
/root

/ # set -u && echo $NOSET
/bin/sh: NOSET: parameter not set
/ # set +u && echo $NOSET
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.