'Set -e' කරන්නේ කුමක්ද, එය භයානක ලෙස සැලකිය හැක්කේ ඇයි?


148

මෙම ප්‍රශ්නය පූර්ව සම්මුඛ පරීක්ෂණ ප්‍රශ්නාවලියක පළ වී ඇති අතර එය මට පිස්සුකි. කාටහරි මේකට උත්තර දීලා මට සහනයක් දෙන්න පුළුවන්ද? ප්‍රශ්නාවලියට විශේෂිත කවචයක් ගැන සඳහනක් නැති නමුත් රැකියා විස්තරය යුනික්ස් සා සඳහා ය. නැවතත් ප්‍රශ්නය සරලවම ...

'Set -e' කරන්නේ කුමක්ද, එය භයානක ලෙස සැලකිය හැක්කේ ඇයි?


Answers:


158

set -e කිසියම් උප කමාන්ඩ් හෝ නල මාර්ගයක් ශුන්‍ය නොවන තත්වයක් ලබා දෙන්නේ නම් කවචය පිටවීමට හේතු වේ.

සම්මුඛ පරීක්ෂක බොහෝ විට සොයමින් සිටි පිළිතුර නම්:

Init.d ස්ක්‍රිප්ට් සෑදීමේදී "set -e" භාවිතා කිරීම භයානක වනු ඇත:

Http://www.debian.org/doc/debian-policy/ch-opersys.html වෙතින් 9.3.2 -

Init.d ස්ක්‍රිප්ට් වල set -e භාවිතා කිරීමට ප්‍රවේශම් වන්න. Init.d ස්ක්‍රිප්ට් අහෝසි නොකර ඩීමන් දැනටමත් ක්‍රියාත්මක වන විට හෝ දැනටමත් නවතා ඇති විට නිවැරදි init.d ස්ක්‍රිප්ට් ලිවීමට විවිධ දෝෂ පිටවීමේ තත්වයන් පිළිගැනීම අවශ්‍ය වන අතර පොදු init.d ශ්‍රිත පුස්තකාල ක්‍රියාත්මක වන විට set -e සමඟ ඇමතීම ආරක්ෂිත නොවේ. Init.d ස්ක්‍රිප්ට් සඳහා, බොහෝ විට set -e භාවිතා නොකිරීම පහසු වන අතර ඒ වෙනුවට එක් එක් විධානයේ ප්‍රති result ල වෙන වෙනම පරීක්ෂා කරන්න.

මෙය සම්මුඛ පරීක්‍ෂක දෘෂ්ටි කෝණයකින් වලංගු ප්‍රශ්නයක් වන බැවින් එය සේවාදායක මට්ටමේ ස්ක්‍රිප්ටින් සහ ස්වයංක්‍රීයකරණය පිළිබඳ වැඩ කරන දැනුමක් ලබා ගනී.


හොඳ කරුණක්. එය තාක්‍ෂණිකව දෝෂයක් විය හැකි දෙයක් මත ඇරඹුම් ක්‍රියාවලිය නවත්වනු ඇත, නමුත් සමස්ත පිටපතම නැවැත්වීමට ඉඩ නොදිය යුතුය
මතෙ

මම stackoverflow.com/questions/78497/… සමඟ එකඟ වුවද , මෙම ශෛලිය ඉලක්කගත වැඩ බර ඉක්මවා යාමට පෙර කෙටි ආරම්භක චෙක්පත් සහ ල ging ු-සටහන් හෝ වෙනත් පරිසර වඳුරන් පැච් කිරීම සඳහා හොඳ සුදුසුකමක් සොයා ගනී යැයි අපි සිතමු. අපි අපගේ ඩොකර් රූපය සඳහා මෙම ප්‍රතිපත්තියම භාවිතා කරමු init ස්ක්‍රිප්ට්.
ජොෂ්පෙරි

34

සිට bash(1):

          -e      Exit immediately if a pipeline (which may consist  of  a
                  single  simple command),  a subshell command enclosed in
                  parentheses, or one of the commands executed as part  of
                  a  command  list  enclosed  by braces (see SHELL GRAMMAR
                  above) exits with a non-zero status.  The shell does not
                  exit  if  the  command that fails is part of the command
                  list immediately following a  while  or  until  keyword,
                  part  of  the  test  following  the  if or elif reserved
                  words, part of any command executed in a && or  ││  list
                  except  the  command  following  the final && or ││, any
                  command in a pipeline but the last, or if the  command’s
                  return  value  is being inverted with !.  A trap on ERR,
                  if set, is executed before the shell exits.  This option
                  applies to the shell environment and each subshell envi-
                  ronment separately (see  COMMAND  EXECUTION  ENVIRONMENT
                  above), and may cause subshells to exit before executing
                  all the commands in the subshell.

අවාසනාවට, එය භයානක වන්නේ මන්දැයි සිතීමට තරම් මම නිර්මාණශීලී නොවෙමි, “ඉතිරි පිටපත ක්‍රියාත්මක නොවනු ඇත” හෝ “සමහර විට එය සැබෑ ගැටලු වසං කළ හැකිය”.


1
සැබෑ / වෙනත් ගැටළු වසං කරන්න, ඔව්, මම එය දකිනු ඇතැයි අනුමාන කරමි ... එය භයානක බවට උදාහරණයක් ඉදිරිපත් කිරීමට ද මම
වෙහෙසට පත්ව සිටියෙමි

මේ සඳහා පිටුවක් තිබේ set! මම හැම විටම අවසන් builtin(1). ස්තූතියි.
ජැරඩ් බෙක්

මම කොහොමද සඳහා ලේඛගතකිරීම බව දැන සිටිය setදී befound ය man 1 bash?? සහ විශාල වශයෙන් විශාල වන අත්පොතක පිටුවක මූලික පදය -eසඳහා විකල්පය සොයා ගැනීමට කිසිවෙකුට හැක්කේ setකෙසේද? ඔබට /-eමෙහි
සෙවිය නොහැක

La බ්ලවුහර්න් භාවිතා කිරීමhelp set
phil294

19

set -eපිටපතක විවිධ කොටස් සඳහා සක්‍රිය හා අක්‍රිය කළ හැකි බව සැලකිල්ලට ගත යුතුය. සම්පූර්ණ පිටපත ක්‍රියාත්මක කිරීම සඳහා එය ක්‍රියාත්මක විය යුතු නැත. එය කොන්දේසි සහිතව පවා සක්‍රීය කළ හැකිය. එයින් කියැවුණේ, මම මගේම දෝෂ හැසිරවීමක් (හෝ නොකිරීම) කරන බැවින් මම එය කිසි විටෙකත් භාවිතා නොකරමි.

some code
set -e     # same as set -o errexit
more code  # exit on non-zero status
set +e     # same as set +o errexit
more code  # no exit on non-zero status

trapමෙයද set -eවිශේෂිත වන්නේ විධානයෙහි ඇති Bash man පිටු කොටසේ වන අතර එය යම් යම් තත්වයන් යටතේ ක්‍රියා කරන ආකාරයද විස්තර කරයි .

අසමත් වූ විධානය විධාන ලැයිස්තුවේ කොටසක් වී ටික වේලාවකට පසුව හෝ යතුරුපදය තෙක්, if ප්‍රකාශයක පරීක්ෂණයේ කොටසක්, && හෝ. ප්‍රතිලාභ අගය ආපසු හරවනු ලැබේ!. Errexit විකල්පය විසින් අනුගමනය කරන ලද කොන්දේසි මේවාය.

එබැවින් ශුන්‍ය නොවන තත්වයක් පිටවීමක් ඇති නොවන කොන්දේසි කිහිපයක් තිබේ.

මම හිතන්නේ අන්තරාය ක්‍රියාත්මක වන්නේ කවදාද යන්න තේරුම් නොගැනීම set -eසහ එය සිදු නොවූ විට සහ සමහර අවලංගු උපකල්පනයක් යටතේ එය වැරදියට විශ්වාස කිරීම ය.

කරුණාකර BashFAQ / 105 ද බලන්න -e (හෝ set -o errexit, හෝ tra ERR) මා බලාපොරොත්තු වූ දේ නොකරන්නේ ඇයි?


ප්‍රශ්නයෙන් මඳක් ating ත් වන අතර, මෙම පිළිතුර හරියටම මා සොයන්නේ එයයි: පිටපතක කුඩා කොටසක් සඳහා එය නිවා දමන්න!
ස්ටෙෆාන් බිජ්සිටර්

13

මෙය රැකියා සම්මුඛ පරීක්ෂණයක් සඳහා වන ප්‍රශ්නාවලියකි. ප්‍රශ්න වර්තමාන කාර්ය මණ්ඩලය විසින් ලියා ඇති අතර ඒවා වැරදි විය හැකිය. මෙය අනිවාර්යයෙන්ම නරක නොවන අතර සෑම කෙනෙකුම වැරදි සිදු කරන අතර සම්මුඛ පරීක්ෂණ ප්‍රශ්න බොහෝ විට සමාලෝචනයකින් තොරව අඳුරු කොනක හිඳින අතර සම්මුඛ පරීක්ෂණයක් අතරතුරදී පමණක් එළියට එනු ඇත.

'සෙට්-ඊ' අප "භයානක" යැයි සලකන කිසිවක් නොකර සිටීම සම්පූර්ණයෙන්ම කළ හැකිය. එහෙත් එම ප්‍රශ්නයේ කතුවරයා ඔවුන්ගේම නොදැනුවත්කම හෝ පක්ෂග්‍රාහීත්වය නිසා 'set -e' භයානක යැයි වැරදියට විශ්වාස කළ හැකිය. සමහර විට ඔවුන් දෝෂ සහිත ෂෙල් පිටපතක් ලියා ඇති අතර, එය දරුණු ලෙස බෝම්බ හෙලනු ඇති අතර, ඔවුන් වැරදිසහගත ලෙස සිතුවේ 'සෙට්-ඊ' දෝෂාරෝපණය කළ යුතු බවයි.

මම පසුගිය අවුරුදු 2 තුළ බොහෝ විට රැකියා සම්මුඛ සාකච්ඡා 40 කට සහභාගී වී ඇති අතර සම්මුඛ පරීක්ෂකයින් සමහර විට වැරදි ප්‍රශ්න අසයි, නැතහොත් වැරදි පිළිතුරු ඇත.

නැතහොත් එය උපක්‍රමශීලී ප්‍රශ්නයක් විය හැකිය, එය කොර විය හැකි නමුත් සම්පූර්ණයෙන්ම අනපේක්ෂිත නොවේ.

නැතහොත් මෙය හොඳ පැහැදිලි කිරීමක් විය හැකිය: http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg473314.html


1
+1 මම එකම බෝට්ටුවේ සිටිමි, මා සමඟ ගනුදෙනු කළ 'තාක්‍ෂණික' සම්මුඛ සාකච්ඡා බොහොමයක් අවම වශයෙන් නොමඟ යවා ඇත.
cpbills

1
වොව්. ඩෙබියන් ලැයිස්තුවේ හොඳ සොයා ගැනීමක්. සම්මුඛ පරීක්ෂණ ප්‍රශ්න නොදැන සිටීම සඳහා +1. මට මතකයි මම නිවැරදි බව 100% ක් විශ්වාස කළ බැවින් වරක් නෙට්බැක් පිළිතුරක් තර්ක කිරීම. ඔවුන් කිව්වා නෑ. මම ගෙදර ගිහින් ගොග්ල් කළා, මම හරි.
egorgry

9

set -e කිසියම් දෙයක් ශුන්‍ය නොවන ප්‍රතිලාභ අගයක් ලබා දෙන සෑම විටම පිටවන ලෙස ස්ක්‍රිප්ට් එකක බාෂ්ට පවසයි.

ඔබ යම් දෙයකට අවසර ලබා දී නොමැති නම් සහ ඒවා නැවත සීමා කිරීමට පෙර ඔබේ පිටපත මිය ගියහොත් මිස එය කරදරකාරී හා දෝෂ සහිත යැයි මට නොපෙනේ.


එය හොඳය. අකාලයේ මිය යන පිටපතක ඇති අවසරයන් ගැන මම නොසිතුවද එය භයානක යැයි සැලකේ. මෙම ප්‍රශ්නාවලියෙහි විනෝදජනක කොටස නම් ඔබට මිනිසා හෝ ගූගල් වැනි කිසිදු විමර්ශන ද්‍රව්‍යයක් භාවිතා කළ නොහැකි අතර ඔබට සම්පූර්ණයෙන් පිළිතුරු දිය නොහැකි නම් එයට කිසිසේත් පිළිතුරු නොදෙන්න.
egorgry

6
ඒක මෝඩ වැඩක්, මම මේ සේවායෝජකයා ගැන නැවත සලකා බලනවා ... විහිළු කරනවා (වර්ග කිරීම). ශක්තිමත් දැනුමේ පදනමක් තිබීම හොඳය, නමුත් තොරතුරු තාක්ෂණයේ අඩක් දැන ගැනීම / කොහෙන්ද / තොරතුරු සොයා ගැනීම ... අයදුම්කරුවන් ලකුණු කිරීමේදී එය සැලකිල්ලට ගැනීමට ඔවුන් දක්ෂ විය. පැත්තක සටහනක, set -eඇත්ත වශයෙන්ම මට එය ඔබගේ ස්ක්‍රිප්ට් වල දෝෂ පරික්ෂා කිරීම නොසලකා හැරීම කම්මැලිකම ගැන කථා කරයි ... එබැවින් මෙම සේවායෝජකයා සමඟද මතක තබා ගන්න ... ඔවුන් එය භාවිතා කරන්නේ නම් ගොඩක්, ඔවුන්ගේ ස්ක්‍රිප්ට් මොන වගේද, ඔබට අනිවාර්යයෙන්ම නඩත්තු කිරීමට සිදුවනු ඇත ...
cpbills

විශිෂ්ට ලක්ෂ්‍යය @cpbills. ස්ක්‍රිප්ට් එකක සෙට්-ඊ සඳහා කිසිදු ප්‍රයෝජනයක් මා නොදකින අතර එය බොහෝ විට මා මෙතරම් කඩුල්ලේ රැඳී ඇත්තේ එබැවිනි. සමහර ප්‍රශ්න ඇත්තෙන්ම හොඳයි, සමහර ඒවා ඇත්තෙන්ම විකාර සහ අහඹු ඒවා බැවින් මම සියලු ප්‍රශ්න පළ කිරීමට කැමතියි.
egorgry

මම බොහෝ පද්ධතිය cron වලින් රැකියා එය දැකලා තියෙනවා ...
ඇන්ඩෲ

8

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 && bNonzero ආපසු ලබා දෙන විට , එය නොසලකා හරිනු ලැබේ 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 අධ්‍යාපනයට ආදේශකයක් නොවේ.


2

මම හිතන්නේ එය භයානකයි, මන්ද ඔහු තවදුරටත් ඔබේ පිටපත ගලායාම පාලනය නොකරන බැවිනි. ස්ක්‍රිප්ට් ඉල්ලා සිටින ඕනෑම විධානයක් ශුන්‍ය නොවන ලෙස ආපසු ලබා දෙන තාක් කල් ස්ක්‍රිප්ටය අවසන් විය හැකිය. එබැවින් ඔබ කළ යුතුව ඇත්තේ ඕනෑම සංරචකයක හැසිරීම හෝ ප්‍රතිදානය වෙනස් කරන යමක් කිරීම පමණි, එවිට ඔබට ප්‍රධාන පිටපත අවසන් කිරීමට සිදුවේ. එය ශෛලියේ ගැටලුවක් විය හැකි නමුත් එය අනිවාර්යයෙන්ම ප්‍රතිවිපාක ඇත. ඔබගේ ප්‍රධාන පිටපත කිසියම් ධජයක් තැබිය යුතු යැයි සිතන්නේ නම් සහ එය කලින් අවසන් වූ නිසා නොවේද? ධජය තිබිය යුතු යැයි උපකල්පනය කරන්නේ නම් හෝ අනපේක්ෂිත පෙරනිමි හෝ පැරණි අගයක් සමඟ වැඩ කරන්නේ නම් ඔබ සෙසු පද්ධතියට දෝෂාරෝපණය කරනු ඇත.


මෙම පිළිතුර සමඟ සම්පුර්ණයෙන්ම එකඟ වන්න. එය සහජයෙන්ම භයානක නොවේ , නමුත් එය අනපේක්ෂිත මුල් පිටවීමක් ලබා ගැනීමට අවස්ථාවකි.
pboin

1
මෙය මට මතක් කර දුන්නේ මගේ C ++ පැතිකඩක් වන අතර එය වැඩසටහනක තනි පිවිසුම් ස්ථානයක් / තනි පිටවීමේ ස්ථානයක් නොතිබීම නිසා මගේ පැවරුම්වලින් සෑම විටම ලකුණු ලබා ගනී. මම සිතුවේ එය තනිකරම 'මූලධර්මයක්' බවයි, නමුත් මෙම සෙට්-ඊ ව්‍යාපාරය නිසැකවම පාලනය කරන්නේ කෙසේද සහ ඇයි දේවල් පාලනය කළ නොහැකිද යන්න නිරූපණය කරයි. අවසානයේදී වැඩසටහන් පාලනය සහ අධිෂ් ism ානය පිළිබඳව වන අතර නොමේරූ අවසන් වීමෙන් ඔබ ඒ දෙකම අත්හරිනු ඇත.
මාකින්

0

පෞද්ගලිකව මා සපා කෑ මාසින්ගේ පිළිතුරට වඩාත් ස්ථිර උදාහරණයක් ලෙස, rm foo/bar.txtඔබේ පිටපතෙහි කොතැනක හෝ රේඛාවක් ඇති බව සිතන්න. foo/bar.txtඇත්ත වශයෙන්ම නොපවතී නම් සාමාන්‍යයෙන් විශාල ගනුදෙනුවක් නැත. කෙසේ වෙතත් set -eවර්තමානයත් සමඟ ඔබේ පිටපත කලින්ම අවසන් වේ! අපොයි.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.