Answers:
දෝශ නිරාකරණ ප්රතිදානය බැලීමට bash -x ./script.sh
ඔබේ ස්ක්රිප්ට් set -x
එක සමඟ ඔබේ බාෂ් ස්ක්රිප්ට් එක ආරම්භ කරන්න .
bash
4.1 හෝ ඊට පසු අතිරේක :
ඔබට දෝශ නිරාකරණ ප්රතිදානය වෙනම ගොනුවකට ලිවීමට අවශ්ය නම්, මෙය ඔබගේ ස්ක්රිප්ටයට එක් කරන්න:
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
එහි ම logfile දේශීය syslog හරහා කපා ප්රතිදානය සඳහා තනි තනි පහසුකම් හා මට්ටමේ ඇති කිරීමට අණ.
BASH_XTRACEFD="5"
bash විට ජනනය කරන ලද හෝඩුවාවක් ප්රතිදානය මෙසේ ලියයි set -x
සකසල ගොනුව descriptor 5. exec 5> >(logger -t $0)
ගොනුව descriptor 5 සිට යළි-යොමුකරයි ප්රතිදානය logger
විධාන.
set -x
මම සෑම විටම භාවිතා set -x
හා set +x
. වාචිකතාව ඉහළට / පහළට හැරවීමට ඔබට ඔවුන් සමඟ සිදුවන්නේ කුමක්දැයි බැලීමට අවශ්ය ප්රදේශ ඔතා තැබිය හැකිය.
#!/bin/bash
set -x
..code to debug...
set +x
එසේම ඔබ සංවර්ධන කටයුතු කර ඇති අතර ලොග් 4 ජේ, ලොග් 4 පර්ල් යනාදී නම් වලින් ලොගර් විලාසය හුරුපුරුදු නම්, ඔබට ලොග් 4 බෑෂ් භාවිතා කිරීමට අවශ්ය විය හැකිය .
උපුටා ගැනීමඅපි එයට මුහුණ දෙමු - සරල පරණ දෝංකාරය එය කපා දමන්නේ නැත. log4bash යනු Bash ස්ක්රිප්ට් සඳහා වඩා හොඳ ල ging ු-සටහන් ලබා ගැනීමේ උත්සාහයකි (එනම්, Bash හි ලොග් වීම අඩු කරන්න).
එතැන් සිට ඔබේ බෑෂ් ස්ක්රිප්ට් වල මෙවැනි දේ කළ හැකිය:
#!/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";
මෙම වර්ගයේ ප්රතිදානයේ ප්රති ult ල:
ඔබට වඩා අතේ ගෙන යා හැකි යමක් අවශ්ය නම් පැරණි දේද log4sh
තිබේ. සමාන වැඩ log4bash
, මෙහි ඇත:
alias say="spd-say"
මගේ .bashrc හි ඇත, එය say
වෙනත් ඩිස්ට්රෝස් හෝ ඕඑස් එක්ස් වෙතින් විධානය අනුකරණය කරයි .
බොහෝ ඩිස්ට්රෝස් වල ස්ථාපනය කළ හැකි පැකේජයක් වන bashdb , bash debugger ඇත. එය bash හි සාදන ලද දීර් deb නිදොස් කිරීමේ මාදිලිය ( shopt -s extdebug
) භාවිතා කරයි. එය gdb වගේ. යම් රසයක් ලබා දීම සඳහා නියැදි සැසියක් මෙන්න:
$ 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
Gdb හි මෙන්, ප්රකාශය ක්රියාත්මක කිරීමට පෙර එය පෙන්වනු ලැබේ. එම නිසා ප්රකාශය සිදු කිරීමට පෙර එය කරන්නේ කුමක් දැයි බැලීමට අපට විචල්යයන් පරීක්ෂා කළ හැකිය.
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" ස්ක්රිප්ට් සමඟ ඔබට සූර්යග්රහණය සහ ෂෙල්ඩ් වල ඒකාබද්ධ පරිසරය භාවිතා කළ හැකිය.
පෙරනිමියෙන් ෂෙල් කළ සංවර්ධන මෙවලම /bin/dash
පරිවර්තකයා ලෙස භාවිතා කරයි . /bin/bash
වෙබයේ සහ මගේ පරිසරයේ ඇති බොහෝ ෂෙල් උදාහරණ සමඟ වඩා හොඳ අනුකූලතාවයක් ඇති කිරීම සඳහා මම මෙය වෙනස් කළෙමි .
සටහන: ඔබට මෙය වෙනස් කළ හැකිය: කවුළුව -> මනාපය -> ෂෙල් ස්ක්රිප්ට් -> පරිවර්තකයන්
_DEBUG.sh
ඔබේ ස්ක්රිප්ට් නිදොස්කරණය සඳහා මූලික වශයෙන් (readme.txt) ස්ක්රිප්ට් භාවිතා කිරීමට පියවර නිදොස් කිරීමේ පැකේජයට ඇත:
- ෂෙල් ස්ක්රිප්ට් ව්යාපෘතිය සාදන්න: ගොනුව -> නව -> වෙනත් -> ෂෙල් ස්ක්රිප්ට් -> ෂෙල් ස්ක්රිප්ට් ව්යාපෘති විශාරද .
- Bash ස්ක්රිප්ට් ගොනුවක් සාදන්න: ගොනුව -> නව -> ගොනුව . මෙම උදාහරණය සඳහා, එය එසේ වනු ඇත
script.sh
. දිගුව ".sh" විය යුතු අතර එය අත්යවශ්ය වේ._DEBUG.sh
ව්යාපෘති ෆෝල්ඩරයට ගොනුව පිටපත් කරන්න .ගොනුවේ ඉහළට පහත පෙළ ඇතුල් කරන්න
script.sh
:. _DEBUG.sh
ගොනුව මයික්රොසොෆ්ට් වින්ඩෝස් හි නිර්මාණය කර ඇත්නම්, ගොනුව -> පරිවර්තන රේඛා පරිසීමක -> යුනික්ස් වෙත ක්රියාත්මක කිරීමට වග බලා ගන්න .
දෝශ නිරාකරණ වින්යාසය සකසන්න : ධාවනය -> දෝශ නිරාකරණ වින්යාසය -> බෑෂ් ස්ක්රිප්ට් ... මෙහි සැකසීමට ක්ෂේත්ර 2 ක් ඇත:
a) "Bash script:" - නිදොස් කිරීම සඳහා සූර්යග්රහණයේ වැඩබිමෙහි Bash ස්ක්රිප්ටයේ මාර්ගය.
e) "නිදොස් කිරීමේ වරාය:" 33333නිදොස් කිරීමේ ඉදිරිදර්ශනයට මාරුවන්න. නිදොස් කිරීමේ සැසිය ආරම්භ කරන්න. බාෂ්
script.sh
කවචයෙන් දියත් කරන්න .
මෙම bash නිදොස්කරණයෙහි සම්මත ක්රමලේඛන නිදොස්කරණය කරන්නන්ගේ සම්පූර්ණ ලක්ෂණ ඇත:
ෂෙල්ඩ් (ෂෙල් ස්ක්රිප්ට් කර්තෘ) අයිඩීඊ (ඒකාබද්ධ සංවර්ධන පරිසරය) ඔබේ පිටපත ලිවීමේදී සන්දර්භය පරීක්ෂා කිරීම, ඉස්මතු කිරීම සහ ඉන්ඩෙන්ටින් කිරීම සඳහා අමතර ප්රසාද දීමනාවක් ඇත. එය නිවැරදිව ඉන්ඩෙන්ට් නොකළේ නම්, ඔබට වහාම එහි බොහෝ දෝෂ සලකුණු කිරීමට / දේශීය කිරීමට හැකිය.
ඉන්පසු වෙනත් IDE ප්රතිලාභද ඇත:
මෑත වසරවලදී අපූරු සම්පතක් දර්ශනය විය: http://shellcheck.net
එය සාමාන්ය බාෂ් වලට වඩා වැඩි යමක් ඔබට පෙන්වන අතර, එම කරදරකාරී අනාවරණය නොකළ උපුටා දැක්වීම් හෝ කැරලි වරහන් යනාදිය පහසුවෙන් සොයා ගැනීමට කෙනෙකුට ඉඩ සලසයි.
සංවේදී තොරතුරු (අයිපී, මුරපද, ආදිය) අන්තර්ජාලය හරහා ඇලවීම නොකිරීමට වග බලා ගන්න ... (විශේෂයෙන් එය http, සංකේතනය නොකළ පරිදි) (බාගත කිරීම සඳහා ෂෙල්චෙක් ද ඇති බව මම විශ්වාස කරමි, නමුත් මට විශ්වාස නැත)
වර්තමානයේ VS Code Bash Debug ඇත.
https://marketplace.visualstudio.com/items?itemName=rogalmic.bash-debug
එයට 'පියවරෙන් පියවර / පිටතට / ඉහළින්' ඇති අතර එක් එක් විචල්යයේ වටිනාකම ද පෙන්වයි.