উত্তর:
আপনার বাশ স্ক্রিপ্টটি শুরু করুন bash -x ./script.sh
বা আপনার স্ক্রিপ্টে set -x
ডিবাগ আউটপুট দেখতে যুক্ত করুন।
bash
৪.১ বা তার পরে অতিরিক্ত :
আপনি যদি আলাদা কোনও ফাইলে ডিবাগ আউটপুট লিখতে চান তবে এটি আপনার স্ক্রিপ্টে যুক্ত করুন:
exec 5> debug_output.txt
BASH_XTRACEFD="5"
দেখুন: https://stackoverflow.com/a/25593226/3776858
আপনি যদি লাইন নম্বর দেখতে চান তবে এটি যুক্ত করুন:
PS4='$LINENO: '
logger
কমান্ডে অ্যাক্সেস থাকে তবে আপনি টাইমস্ট্যাম্প, স্ক্রিপ্টের নাম এবং লাইন নম্বর সহ আপনার সিসলগের মাধ্যমে ডিবাগ আউটপুট লিখতে এটি ব্যবহার করতে পারেন:
#!/bin/bash
exec 5> >(logger -t $0)
BASH_XTRACEFD="5"
PS4='$LINENO: '
set -x
# Place your code here
আপনি বিকল্প ব্যবহার করতে পারেন -p
এর logger
একজন ব্যক্তি সুবিধা এবং স্তর নিজস্ব লগ ফাইল স্থানীয় syslog- র মাধ্যমে আউটপুট লিখতে সেট করতে কমান্ড।
BASH_XTRACEFD="5"
ট্রেস আউটপুট উত্পন্ন যখন লিখেছেন ব্যাশ set -x
থেকে সক্রিয় করা হয় বর্ণনাকারী দায়ের 5. exec 5> >(logger -t $0)
ফাইল বর্ণনাকারী 5 থেকে আউটপুট পুননির্দেশনা logger
কমান্ড।
set -x
আমি সবসময় ব্যবহার করি set -x
এবং set +x
। ভার্বোসিটিটি উপরে / নীচে পরিণত করতে আপনি তাদের সাথে কী ঘটছে তা আপনি দেখতে চান।
#!/bin/bash
set -x
..code to debug...
set +x
এছাড়াও যদি আপনি বিকাশ কাজ করে থাকেন এবং লগ 4j, log4perl ইত্যাদি নামে লগারের স্টাইলের সাথে পরিচিত হন, তবে আপনি লগ 4 ব্যাশ ব্যবহার করতে চাইতে পারেন ।
উদ্ধৃতাংশআসুন এটির মুখোমুখি হন - সাধারণ পুরানো প্রতিধ্বনি কেবল এটি কাটেনি। লগ 4 ব্যাশ ব্যাশ স্ক্রিপ্টগুলির জন্য আরও ভাল লগিং করার একটি প্রচেষ্টা (যেমন বাশ-এ লগিং কম চুষিয়ে নিন)।
সেখান থেকে আপনি আপনার বাশ স্ক্রিপ্টগুলিতে এই জাতীয় জিনিসগুলি করতে পারেন:
#!/usr/bin/env bash
source log4bash.sh
log "This is regular log message... log and log_info do the same thing";
log_warning "Luke ... you turned off your targeting computer";
log_info "I have you now!";
log_success "You're all clear kid, now let's blow this thing and go home.";
log_error "One thing's for sure, we're all gonna be a lot thinner.";
# If you have figlet installed -- you'll see some big letters on the screen!
log_captains "What was in the captain's toilet?";
# If you have the "say" command (e.g. on a Mac)
log_speak "Resistance is futile";
এই ধরণের ফলাফলের ফলাফল:
আপনার যদি আরও বেশি পোর্টেবলের প্রয়োজন হয় তবে এটি আরও পুরোনো log4sh
। এর মতো log4bash
এখানে কাজ করে:
alias say="spd-say"
আমার .bashrc, যা অনুকরণে say
অন্যান্য ডিস্ট্রো বা OS X এর থেকে কমান্ড
এখানে ব্যাশ ডিবাগার, বাশডবি রয়েছে যা অনেকগুলি ডিস্ট্রোতে ইনস্টলযোগ্য প্যাকেজ। এটি ব্যাশের অন্তর্নির্মিত বর্ধিত ডিবাগিং মোড ( shopt -s extdebug
) ব্যবহার করে। দেখতে অনেকটা জিডিবির মতো; কিছু স্বাদ দিতে এখানে একটি নমুনা সেশন:
$ ls
1st.JPG 2ndJPG.JPG
$ cat ../foo.sh
for f in *.JPG
do
newf=${f/JPG/jpg}
mv $f $newf
done
$ bashdb ../foo.sh
(foo.sh:1):
1: for f in *.JPG
bashdb<0> next
(foo.sh:3):
3: newf=${f/JPG/jpg}
bashdb<1> next
(foo.sh:4):
4: mv $f $newf
জিডিবির মতোই, বিবৃতিটি কার্যকর করা হতে চলেছে ঠিক আগে প্রদর্শিত হবে। সুতরাং আমরা ভেরিয়েবলগুলি পরীক্ষা করে দেখতে পারি যে স্টেটমেন্টটি এটি করার আগে এটি কী করবে।
bashdb<2> print $f $newf
1st.JPG 1st.jpg
bashdb<3> next
(foo.sh:1):
1: for f in *.JPG
bashdb<4> next
(foo.sh:3):
3: newf=${f/JPG/jpg}
bashdb<5> next
(foo.sh:4):
4: mv $f $newf
bashdb<6> print $f $newf
2ndJPG.JPG 2ndjpg.JPG
আমরা যা চাই তা নয়! আবার প্যারামিটার সম্প্রসারণ তাকান।
bashdb<7> print $f ${f/JPG/jpg}
2ndJPG.JPG 2ndjpg.JPG
bashdb<8> print $f ${f/JPG$/jpg}
2ndJPG.JPG 2ndJPG.JPG
bashdb<9> print $f ${f/%JPG/jpg}
2ndJPG.JPG 2ndJPG.jpg
ঠিক আছে, এটি কাজ করে। আসুন newf
সঠিক মান সেট করা যাক ।
bashdb<10> eval newf=${f/%JPG/jpg}
$? is 0
bashdb<11> print $f $newf
2ndJPG.JPG 2ndJPG.jpg
ভাল লাগছে। স্ক্রিপ্ট চালিয়ে যান।
bashdb<12> next
Debugged program terminated normally. Use q to quit or R to restart.
$ ls
1st.jpg 2ndJPG.jpg
বর্ন-এর মতো বেশিরভাগ বোর্ন-ভিত্তিক শেলগুলিতে স্ক্রিপ্টগুলি ডিবাগ করার মানক পদ্ধতিটি হ'ল set -x
আপনার স্ক্রিপ্টের শীর্ষে লেখা। এটি বাশ কী হবে / সম্পাদিত হচ্ছে এবং কীভাবে যুক্তি মূল্যায়ন করা হয় সে সম্পর্কে আরও ভার্জোজ তৈরি করবে।
-x Print commands and their arguments as they are executed.
এটি উভয়ই দোভাষী বা ভিতরে স্ক্রিপ্টগুলির জন্য দরকারী। উদাহরণ স্বরূপ:
$ find "$fileloc" -type f -prune "$filename" -print
+ find /var/adm/logs/morelogs -type f -prune '-name *.user' -print
find: unknown predicate '-name *.user'
$ find "$fileloc" -type f -prune $filename -print
+ find /var/adm/logs/morelogs -type f -prune -name '*.user' -print
find: '/var/adm/logs/morelogs': No such file or directory
উপরের অংশে আমরা দেখতে পাচ্ছি কেন কিছু একক উদ্ধৃতির কারণে অনুসন্ধান ব্যর্থ হচ্ছে।
বৈশিষ্ট্যটি নিষ্ক্রিয় করতে, কেবল টাইপ করুন set +x
।
আপনি নীচে লিঙ্কিত "_DEBUG.sh" স্ক্রিপ্টের সাথে Eclipse এবং Shelled এর সম্মিলিত পরিবেশ ব্যবহার করতে পারেন।
ডিফল্টরূপে শেলড উন্নয়ন সরঞ্জাম /bin/dash
দোভাষী হিসাবে ব্যবহার করে। /bin/bash
ওয়েবে এবং আমার পরিবেশে বেশিরভাগ শেল উদাহরণের সাথে আরও ভাল সামঞ্জস্য রাখতে আমি এটিকে পরিবর্তন করেছি।
দ্রষ্টব্য: আপনি এটিকে পরিবর্তন করতে পারেন: উইন্ডো -> পছন্দ -> শেল স্ক্রিপ্ট -> দোভাষী
ডিবাগার প্যাকেজটিতে _DEBUG.sh
আপনার স্ক্রিপ্ট ডিবাগিংয়ের জন্য স্ক্রিপ্টটি ব্যবহারের পদক্ষেপ রয়েছে যা মূলত (রিডমি. টেক্সট):
- শেল স্ক্রিপ্ট প্রকল্প তৈরি করুন: ফাইল -> নতুন -> অন্যান্য -> শেল স্ক্রিপ্ট -> শেল স্ক্রিপ্ট প্রকল্প উইজার্ড ।
- বাশ স্ক্রিপ্ট ফাইল তৈরি করুন: ফাইল -> নতুন -> ফাইল । এই উদাহরণস্বরূপ, এটি হবে
script.sh
। এক্সটেনশনটি ".sh" হওয়া উচিত এবং এটি আবশ্যক।_DEBUG.sh
প্রজেক্ট ফোল্ডারে ফাইলটি অনুলিপি করুন ।ফাইলের শীর্ষে নীচের পাঠ্যটি প্রবেশ করান
script.sh
:. _DEBUG.sh
ফাইল মাইক্রোসফট উইন্ডোজ তৈরি হয়, তাহলে চালানো নিশ্চিত করা ফাইল > - রূপান্তর লাইন বিভেদক করতে -> ইউনিক্স ।
একটি ডিবাগ প্রবর্তন কনফিগারেশন সেট আপ করুন: চালান -> ডিবাগ কনফিগারেশন -> বাশ স্ক্রিপ্ট ... এখানে 2 টি ক্ষেত্র সেট আছে:
ক) "বাশ স্ক্রিপ্ট:" - ডিবাগ করার জন্য বাশ স্ক্রিপ্টের কর্মক্ষেত্রের পথের পথ।
e) "ডিবাগার পোর্ট:" 33333ডিবাগের দৃষ্টিভঙ্গিতে স্যুইচ করুন। ডিবাগিং সেশন শুরু করুন।
script.sh
বাশ শেল থেকে লঞ্চ করুন ।
এই ব্যাশ ডিবাগারে স্ট্যান্ডার্ড প্রোগ্রামিং ডিবাগারগুলির পুরো বৈশিষ্ট্য রয়েছে যেমন:
শেলড (শেল স্ক্রিপ্ট সম্পাদক) আইডিই (ইন্টিগ্রেটেড ডেভলপমেন্ট এনভায়রনমেন্ট) আপনার স্ক্রিপ্টটি লেখার সময় প্রসঙ্গ চেকিং, হাইলাইট এবং ইন্ডেন্টিংয়ের একটি অতিরিক্ত বোনাস পেয়েছে। যদি এটি সঠিকভাবে ইনডেন্ট না করে, আপনি অবিলম্বে সেখানে স্থানীয় অনেক ত্রুটি পতাকাঙ্কিত করতে / স্থানীয় করতে সক্ষম হতে পারেন।
তারপরে অন্যান্য আইডিই সুবিধা রয়েছে যেমন:
সাম্প্রতিক বছরগুলিতে একটি দুর্দান্ত সংস্থান হাজির হয়েছে: http://shellcheck.net
এটি আপনাকে নিয়মিত বাশের চেয়ে আরও বেশি কিছু দেখায়, যার ফলে সহজেই সেইসব সমস্যাযুক্ত আনলসড কোট বা কোঁকড়ানো বন্ধনী ইত্যাদির সন্ধান পাওয়া যায় etc.
আপনি নিশ্চিত করুন যে আপনি সংবেদনশীল ইনফোগুলি (আইপিএস, পাসওয়ার্ড, ইত্যাদি) নেটে পেস্ট করবেন না ... (বিশেষত এটি HT, এনক্রিপ্ট করা না থাকায়) (আমি বিশ্বাস করি যে শেলচেক ডাউনলোড করার জন্য উপলব্ধ, তবে আমি নিশ্চিত নই)
আজকাল, ভিএস কোড ব্যাশ ডিবাগ রয়েছে।
https://marketplace.visualstudio.com/items?itemName=rogalmic.bash-debug
এটিতে 'স্টেপ ইন / আউট / আউট' রয়েছে এবং প্রতিটি ভেরিয়েবলের মানও দেখায়।