set -e
සමහර කොන්දේසි යටතේ හැර, නොසරෝ පිටවීමේ කේතයක් හමු වුවහොත් ස්ක්රිප්ට් එක අවසන් වේ. වචන කිහිපයකින් එහි භාවිතයේ ඇති අන්තරායන් සාරාංශ කිරීමට: එය මිනිසුන් සිතන ආකාරයට හැසිරෙන්නේ නැත.
මගේ මතය අනුව, එය අනුකූලතා අරමුණු සඳහා පමණක් අඛණ්ඩව පවතින භයානක හැක් එකක් ලෙස සැලකිය යුතුය. මෙම set -e
ප්රකාශය දෝෂ කේත භාවිතා කරන භාෂාවකින් ව්යතිරේකයට සමාන පාලන ප්රවාහයක් භාවිතා කරන භාෂාවක් බවට පත් නොකරයි, එය හුදෙක් එම හැසිරීම අනුකරණය කිරීමට දුර්වල ලෙස උත්සාහ කරයි.
ග්රෙග් වුලෙජ්ගේ අන්තරායන් ගැන කීමට බොහෝ දේ ඇත set -e
:
දෙවන සබැඳිය තුළ, නොදැනුවත්ව හා අනපේක්ෂිත ලෙස හැසිරීමට විවිධ උදාහරණ ඇත set -e
.
නොදැනුවත්ව හැසිරීම පිළිබඳ උදාහරණ set -e
කිහිපයක් (සමහරක් ඉහත විකී සබැඳියෙන් ලබාගෙන ඇත):
set -e
x = 0
x ++ ට ඉඩ දෙන්න
echo "x යනු $ x"
ඉහත සඳහන් දේ මඟින් ෂෙල් ස්ක්රිප්ට් අකාලයේ පිටවීමට හේතු වනු ඇත, මන්ද let x++
0 ආපසු let
එවීම, එය යතුරුපදය ව්යාජ අගයක් ලෙස සලකන අතර එය නොසරෝ පිටවීමේ කේතයක් බවට පත් කරයි. set -e
මෙය දුටු අතර නිහ ly ව පිටපත අවසන් කරයි.
set -e
[-d / opt / foo] && echo "අවවාදයයි: foo දැනටමත් ස්ථාපනය කර ඇත. නැවත ලියයි." > & 2
echo "foo ස්ථාපනය කිරීම ..."
ඉහත සඳහන් පරිදි අපේක්ෂිත පරිදි ක්රියා කරයි, /opt/foo
දැනටමත් තිබේ නම් අනතුරු ඇඟවීමක් මුද්රණය කරයි .
set -e
check_previous_install () {
[-d / opt / foo] && echo "අවවාදයයි: foo දැනටමත් ස්ථාපනය කර ඇත. නැවත ලියයි." > & 2
}
check_previous_install
echo "foo ස්ථාපනය කිරීම ..."
ඉහත සඳහන් එකම වෙනස තිබියදීත්, එක් පේළියක් ශ්රිතයක් තුළට ප්රතිනිර්මාණය කර ඇතත්, /opt/foo
නොපවතී නම් එය අවසන් වේ . මෙයට හේතුව එය මුලින් ක්රියාත්මක වීම set -e
හැසිරීමේ විශේෂ ව්යතිරේකයකි . a && b
Nonzero ආපසු ලබා දෙන විට , එය නොසලකා හරිනු ලැබේ set -e
. කෙසේ වෙතත්, දැන් එය ශ්රිතයක් බැවින්, ශ්රිතයේ පිටවීමේ කේතය එම විධානයේ පිටවීමේ කේතයට සමාන වන අතර, නොන්ජෙරෝ ආපසු එන ශ්රිතය නිහ ly ව ස්ක්රිප්ට් එක අවසන් කරයි.
set -e
IFS = $ '\ n' read -d '' -r -a config_vars <config
ඉහත config_vars
දැක්වෙන්නේ ගොනුවෙන් අරාව කියවනු ඇත config
. කතුවරයා අදහස් කරන පරිදි, එය config
අස්ථානගත වී ඇත්නම් එය දෝෂයකින් අවසන් වේ. කතුවරයා අදහස් නොකිරීමට ඉඩ ඇති හෙයින්, config
නව රේඛාවකින් අවසන් නොවන්නේ නම් එය නිහ ly ව අවසන් වේ. set -e
මෙහි භාවිතා නොකළේ නම් , නව config_vars
රේඛාවකින් අවසන් වූවත් නැතත් ගොනුවේ සියලුම පේළි අඩංගු වේ.
උත්කෘෂ්ට පෙළ භාවිතා කරන්නන් (සහ නව පෙළ වැරදි ලෙස හසුරුවන වෙනත් පෙළ සංස්කාරකවරු) පරෙස්සම් වන්න.
set -e
should_audit_user () {
ප්රාදේශීය කණ්ඩායම් කණ්ඩායම් = "$ (කණ්ඩායම්" $ 1 ")"
$ කාණ්ඩවල කණ්ඩායම් සඳහා; කරන්න
if ["$ group" = විගණනය]; ඉන්පසු 0 ආපසු; fi
ඉවරයි
ආපසු 1
}
if_audit_user "$ user" නම්; එවිට
ලොගර් 'බ්ලා'
fi
කිසියම් හේතුවක් නිසා පරිශීලකයා $user
නොපවතින විට, groups
විධානය අසාර්ථක වන අතර විගණනය නොකර යම් කාර්යයක් කිරීමට පරිශීලකයාට ඉඩ දීම වෙනුවට ස්ක්රිප්ට් එක අවසන් වනු ඇතැයි මෙහි කතුවරයා සාධාරණ ලෙස අපේක්ෂා කළ හැකිය . කෙසේ වෙතත්, මෙම අවස්ථාවේ දී set -e
අවසන් කිරීම කිසි විටෙකත් ක්රියාත්මක නොවේ. $user
කිසියම් හේතුවක් නිසා සොයාගත නොහැකි නම් , ස්ක්රිප්ට් එක අවසන් කරනවා වෙනුවට, should_audit_user
ශ්රිතය මඟින් වැරදි දත්ත නැවත ලබා දෙනු ඇත set -e
.
if
ප්රකාශයක කොන්දේසි කොටසේ සිට ක්රියාත්මක වන ඕනෑම ශ්රිතයක් සඳහා මෙය අදාළ වේ , කෙතරම් ගැඹුරට කැදැල්ල තිබුණත්, එය කොතැනක අර්ථ දක්වා තිබුණත්, ඔබ set -e
නැවත එය තුළට දිව ගියත් . if
ඕනෑම අවස්ථාවක භාවිතා කිරීමෙන් set -e
කොන්දේසි වාරණය සම්පූර්ණයෙන් ක්රියාත්මක වන තෙක් එහි බලපෑම සම්පූර්ණයෙන්ම අක්රීය කරයි . කතුවරයා මෙම අනතුර ගැන නොදැන සිටියහොත් හෝ ශ්රිතයක් කැඳවිය හැකි සියලු අවස්ථාවන්හිදී ඔවුන්ගේ සම්පූර්ණ ඇමතුම් තොගය නොදන්නේ නම්, ඔවුන් දෝෂ සහිත කේතයක් ලියනු ඇති අතර සපයනු ලබන සුරක්ෂිතභාවය පිළිබඳ ව්යාජ හැඟීම set -e
අවම වශයෙන් අර්ධ වශයෙන් වේ. දොස් කියන්න.
කතුවරයා මෙම අනතුර ගැන පූර්ණ දැනුවත්ව සිටියත්, මෙහි ප්රති ar ලය වනුයේ යමෙකු එය නොමැතිව ලියන ආකාරයටම කේත ලිවීමයි set -e
, එම ස්විචය නිෂ් less ල ලෙස අඩු කිරීම; කර්තෘට අතින් දෝෂ හැසිරවීමේ කේතය ලිවීමට සිදුවී ඇති ආකාරයට set -e
පමණක් නොව, ඒවා තිබීම set -e
ඔවුන් කළ යුතු නැතැයි සිතමින් ඔවුන්ව රවටා ඇත.
පහත දැක්වෙන තවත් අඩුපාඩු set -e
:
- එය අලස කේතය දිරිමත් කරයි. දෝෂ හසුරුවන්නන් සම්පූර්ණයෙන්ම අමතක කර දමනු ලැබේ, අසමත් වූ ඕනෑම දෙයක් දෝෂය යම් සංවේදී ආකාරයකින් වාර්තා කරනු ඇතැයි යන බලාපොරොත්තුව ඇත. කෙසේ වෙතත්,
let x++
ඉහත උදාහරණ සමඟ , මෙය එසේ නොවේ. ස්ක්රිප්ට් එක අනපේක්ෂිත ලෙස මිය ගියහොත්, එය සාමාන්යයෙන් නිහ ly ව, එය නිදොස්කරණයට බාධා කරයි. ස්ක්රිප්ට් එක මිය නොයන්නේ නම් සහ ඔබ එය අපේක්ෂා කළේ නම් (පෙර වෙඩි උණ්ඩය බලන්න), එවිට ඔබේ අතේ වඩාත් සියුම් හා ද්රෝහී දෝෂයක් තිබේ.
- එය ව්යාජ ආරක්ෂාව පිළිබඳ හැඟීමකට මිනිසුන් යොමු කරයි.
if
-කොන්ඩිෂන් බුලට් පොයින්ට් එක නැවත බලන්න .
- කවචය අවසන් වන ස්ථාන ෂෙල් වෙඩි හෝ ෂෙල් අනුවාද අතර නොගැලපේ.
set -e
එම අනුවාදයන් අතර නවීකරණය කිරීමේ හැසිරීම හේතුවෙන් පැරණි බැෂ් අනුවාදයක් මත වෙනස් ලෙස හැසිරෙන පිටපතක් අහම්බෙන් ලිවිය හැකිය .
set -e
එය විවාදාත්මක කාරණයක් වන අතර, අවට ඇති ගැටළු පිළිබඳව දැනුවත්ව සිටින සමහර අය එයට එරෙහිව නිර්දේශ කරන අතර තවත් සමහරු එය වළක්වා ගැනීමට ක්රියා කරන අතරම සැලකිලිමත් වීමට නිර්දේශ කරති. set -e
සියලු ස්ක්රිප්ට් වල වැරදි තත්වයන් සඳහා අල්ලා ගැනීමක් ලෙස නිර්දේශ කරන බොහෝ ෂෙල් ස්ක්රිප්ටින් නවකයන් ඇත , නමුත් සැබෑ ජීවිතයේ දී එය එසේ ක්රියා නොකරයි.
set -e
අධ්යාපනයට ආදේශකයක් නොවේ.