2> & -, 2> / dev / null, | &, &> / dev / null සහ> / dev / null 2> & 1 අතර වෙනස


209

අතර වෙනස සොයමින්

  • 2>&-
  • 2>/dev/null
  • |&
  • &>/dev/null
  • >/dev/null 2>&1

හා ඔවුන්ගේ පහසුවෙන් එහාමෙහා ගෙන යාමේ non-Bourne shellsවගේ tcsh, mkshආදිය,


2
&>GNU bash ගැළපුම සඳහා mksh සහය දක්වන අතර , මෙය භාවිතා නොකිරීමට දැඩි ලෙස උනන්දු කර ඇති අතර, එය විග්‍රහ කිරීමෙන් දැනට පවතින POSIX ස්ක්‍රිප්ට් වල අර්ථ නිරූපණය බිඳ දැමිය හැකි අතර mksh දැනටමත් POSIX ප්‍රකාරයේදී අක්‍රීය කරයි.
මිරබිලෝස්

මම ද දැක ඇත්තෙමි ^ /dev/nullඑය කරන්නේ කුමක්ද?
බැලූප්ටන්

Answers:


257

පසුබිම සඳහා:

  • එය අංක 1 = සම්මත පිටතට (එනම් STDOUT)
  • එය අංක 2 = සම්මත දෝෂයක් (එනම් STDERR)
  • අංකයක් පැහැදිලිව ලබා දී නොමැති නම්, අංක 1 උපකල්පනය කරනු ලබන්නේ කවචය (bash) විසිනි

මුලින්ම අපි මේවායේ ක්‍රියාකාරිත්වය විසඳා ගනිමු. යොමුව සඳහා උසස් බෑෂ්-ස්ක්‍රිප්ටින් මාර්ගෝපදේශය බලන්න .

කාර්යයන්

2>&-

මෙහි සාමාන්‍ය ස්වරූපය නම් M>&-, “M” යනු ගොනු විස්තර අංකයකි. මෙය කුමන ගොනු විස්තර කරන්නෙකු සඳහා යොමු කර ඇත්ද, එනම් "එම්" සඳහා ප්‍රතිදානය වසා දමයි .

2>/dev/null

මෙහි සාමාන්‍ය ස්වරූපය නම් M>/dev/null, “M” යනු ගොනු විස්තර අංකයකි. මෙය "M" යන ගොනු විස්තරය වෙත හරවා යවනු /dev/nullඇත.

2>&1

මෙහි සාමාන්‍ය ස්වරූපය නම් M>&N, “M” සහ “N” යනු ගොනු විස්තර සංඛ්‍යා වේ. එය "M" සහ "N" යන ගොනු විස්තර කරුවන්ගේ ප්‍රතිදානය තනි ප්‍රවාහයකට ඒකාබද්ධ කරයි .

|&

මෙය කෙටි යෙදුමකි 2>&1 |. එය Bash 4 හි එකතු කරන ලදී.

&>/dev/null

මෙය කෙටි යෙදුමකි >/dev/null 2>&1. එය ගොනු විස්තර 2 (STDERR) සහ විස්තර 1 (STDOUT) වෙත හරවා යවයි /dev/null.

>/dev/null

මෙය කෙටි යෙදුමකි 1>/dev/null. එය ගොනු විස්තර 1 (STDOUT) වෙත හරවා යවයි /dev/null.

බාෂ් නොවන, tcsh, mksh, ආදිය සඳහා අතේ ගෙන යා හැකි හැකියාව.

මම පිටත cshහා වෙනත් ෂෙල් වෙඩි සමඟ ගනුදෙනු කර නැත tcsh. බාෂ්ගේ යළි-යොමුවීම් ක්‍රියාකරුවන් හා සසඳන විට එම 2 දෙනා සමඟ මගේ අත්දැකීම නම්, ඒ සම්බන්ධයෙන් බාෂ් වඩා උසස් බවයි. වැඩි විස්තර සඳහා tcsh man පිටුව බලන්න.

කිසිවක් ගැන ඔබ විමසූ විධානයන්ගෙන් csh / tcsh සෘජුවම සහාය නොදක්වයි. සමාන කාර්යයන් තැනීම සඳහා ඔබට විවිධ සින්ටැක්ස් භාවිතා කිරීමට සිදුවේ.


අපට ජයග්‍රාහකයෙක් සිටී. නමුත් කාර්ය සාධන වෙනසක් හෝ 2>&-එදිරිව එදිරිව සමහරක් නොමැත 2>/dev/null(සමහර "දුර්වල" ලිඛිත වැඩසටහන් 2>&-නිවැරදිව අවතක්සේරු නොකරයි )?
ඩෙට්

3
කාර්ය සාධන වෙනසක් නොතිබිය යුතුය.
slm

5
&>විය bash(ජනපි්රය වනු ගැනීමට අපහසු වුවත් එය වෙනස් දෙයක්, එහි තේරුම ලෙස Bourne හා POSIX ගැළපුම හා විරාම) ආරම්භයේ සිට. >&සහ |&පැමිණෙන්න (t)csh(සහ එය stderr හරවා යැවීමට ඇති එකම ක්‍රමයයි). ඔවුන් zshමුල සිටම සිටි අතර මෑතකදී පමණක් එකතු කර bashඇත. rcවඩා හොඳින් සැලසුම් කරන ලද ක්‍රියාකරුවන් සඳහාද බලන්න .
ස්ටෙෆාන් චසෙලාස්

1
යාවත්කාලීන කිරීම: කාර්ය සාධන ගැටලුව ගැන, එය ද මෙහි සනාථ කර ඇත: unix.stackexchange.com/questions/163955/…
ඩෙට්

1
හායි එස්එල්එම්, සම්බන්ධතාවයට ස්තූතියි. මගේ repo එක වෙනස් නොවීම ගැන මට සතුටුයි (+2-2=0). දැන්, සංස්කරණ කොටසට, මම බොහෝ දේ සංස්කරණය නොකරමි, නමුත් මේ අවස්ථාවේ දී මම එසේ කරමි, මන්ද එය මෙහෙයුමෙන් පසු දත්ත පවතින බව පැහැදිලි කරයි N. මම ඔබට පිළිතුරු කියවා ඇති අතර එය සෑම අංශයකින්ම ඉතා හොඳයි. මේ කුඩා අවිනිශ්චිතතාවයෙන් මා සිතුවේ, ඒ නිසාම සංස්කරණය. නමුත් හරි, ඔබට අවශ්‍ය පරිදි එය නැවත එකතු කිරීමට හෝ ප්‍රතික්ෂේප කිරීමට නිදහස් වන්න. කාරණය පැහැදිලි කළ හැකි යැයි මම බලාපොරොත්තු වෙමි. හොඳ වැඩ දිගටම කරගෙන යන්න.
ආචාර්ය බෙකෝ

12

මෙය STDERR සහ STDOUT යළි හරවා යැවීම සඳහා ය:

  • 2>/dev/null

    STDERR / dev / null වෙත හරවා යවන්න (කොන්සෝලයෙහි දර්ශනය වීම වළක්වන්න)

  • |&

    STPERR සහ STDOUT පයිප්ප විධාන STDIN වෙත හරවන්න (cmd1 | & cmd2)

  • &>/dev/null

    STDERR සහ STDOUT යන දෙකම / dev / null වෙත හරවන්න (කොන්සෝලයෙහි කිසිවක් නොපෙන්වයි)

  • >/dev/null

    STDOUT / dev / null වෙත හරවන්න (කොන්සෝලයේ STDERR පමණක් පෙන්වයි)

  • 2>&-

    නැවත හරවා යැවීම සමඟ භාවිතා කරන ගොනු විස්තරයක් වැසීම සඳහා වේ

මේ සියල්ල බෝර්න් ෂෙල් සඳහා සම්මත යළි හරවා යැවීමේ ක්‍රම වේ.


4
|&හා &>/dev/nullනොවන අතේ ගෙන යා හැකි.
ක්‍රිස් ඩවුන්

4

මෙය තෝරාගත් පිළිතුරට අතිරේකයක් ලෙස සලකන්න. POSIX යනු කුමක්ද සහ නැති ආකෘති මොනවාදැයි දැන ගැනීමට ඔබට අවශ්‍ය විය හැකිය.

POSIX ආකෘති දෙකක් සම්බන්ධ වේ:

2.7.2 ප්‍රතිදානය හරවා යැවීම

ප්‍රතිදානය හරවා යැවීම සඳහා වන පොදු ආකෘති දෙක නම්:

[n]> වචනය

[n]> | වචනය

විකල්ප n මඟින් ගොනු විස්තර අංකය නිරූපණය කරයි. අංකය මඟ හැරී ඇත්නම්, යළි හරවා යැවීම සම්මත ප්‍රතිදානය වෙත යොමු වේ (ගොනු විස්තර 1).

Noclobber විකල්පය සකසා ඇත්නම් (> set -C හි විස්තරය බලන්න) සහ වචනයේ ප්‍රසාරණයෙන් නම් කරන ලද ගොනුව පවතින අතර එය සාමාන්‍ය ගොනුවක් නම් '>' ආකෘතිය භාවිතා කරමින් ප්‍රතිදාන යළි හරවා යැවීම අසාර්ථක වේ. එසේ නොමැතිනම්, '>' හෝ "> |" භාවිතා කර යළි හරවා යැවීම වචන ප්‍රසාරණය වීමෙන් ප්‍රති results ල ලබා දෙන ගොනුව ආකෘති පත්ර මඟින් නියම කරන ලද ගොනු විස්තර කරුවන්ගේ නිමැවුම් සඳහා විවෘත කිරීමට හෝ කිසිවක් නිශ්චිතව දක්වා නොමැති නම් සම්මත ප්‍රතිදානය සඳහා හේතු වේ. ගොනුව නොපවතී නම්, එය නිර්මාණය වනු ඇත; එසේ නොමැති නම්, එය විවෘත කිරීමෙන් පසු හිස් ගොනුවක් ලෙස කපා දැමිය යුතුය.

-

2.7.6 නිමැවුම් ගොනු විස්තරයක් අනුපිටපත් කිරීම

යළි-යොමුවීමේ ක්‍රියාකරු:

[n]> සහ වචනය

එක් ප්‍රතිදාන ගොනු විස්තරයක් තවත් එකකින් අනුපිටපත් කළ යුතුය, නැතහොත් එකක් වසා දැමිය යුතුය. වචනය ඉලක්කම් එකක් හෝ වැඩි ගණනක් තක්සේරු කරන්නේ නම්, n මගින් දැක්වෙන ගොනු විස්තර කරන්නා හෝ n නිශ්චිතව දක්වා නොමැති නම් සම්මත ප්‍රතිදානය, වචනයෙන් දැක්වෙන ගොනු විස්තර කරන්නාගේ පිටපතක් බවට පත් කළ යුතුය; වචනයේ ඉලක්කම් ප්‍රතිදානය සඳහා දැනටමත් විවෘත කර ඇති ගොනු විස්තරයක් නියෝජනය නොකරන්නේ නම්, යළි-යොමුවීමේ දෝෂයක් ඇතිවේ; ෂෙල් දෝෂවල ප්‍රතිවිපාක බලන්න. වචනය '-' ලෙස තක්සේරු කරන්නේ නම්, ගොනු විස්තර කරන්නා n, හෝ n නිශ්චිතව දක්වා නොමැති නම් සම්මත ප්‍රතිදානය වසා ඇත. විවෘත නොවන ගොනු විස්තරයක් වැසීමට උත්සාහ කිරීම දෝෂයක් නොවේ. වචනය වෙනත් දෙයකට තක්සේරු කරන්නේ නම්, හැසිරීම නිශ්චිතව දක්වා නැත.

එබැවින්:

Function      POSIX-compat    POSIX 
2>&-          Yes             close 
2>/dev/null   Yes             redir
2>&1          Yes             dup 
|&            No              
&>/dev/null   No
>/dev/null    Yes             redir
>&/dev/null   ?               ?dup

අන්තිම පේළිය මුල් ප්‍රශ්නයේ නැත, නමුත් එය පැමිණිලි රහිතව ක්‍රියාත්මක වේ. (එසේම / dev / tty / dev / null වෙනුවට ආදේශ කර ඇත).


1
මට සෑම විටම වැඩි විස්තර දැන ගැනීමට අවශ්‍යයි.
ඩෙට්
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.