2> / dev / null යන්නෙන් අදහස් කරන්නේ කුමක්ද?


295

පහත දැක්වෙන විධාන රේඛාව පිළිබඳ කෙටි පැහැදිලි කිරීමක් කිරීමට මම කැමතියි:

grep -i 'abc' content 2>/dev/null 

Answers:


419

මෙම >ක්රියාකරු ගොනුවකට සාමාන්යයෙන් ප්රතිදානය යළි-යොමුකරයි නමුත්, එය උපාංගය වෙත විය හැක. >>එකතු කිරීමටද ඔබට භාවිතා කළ හැකිය .

ඔබ අංකයක් සඳහන් නොකරන්නේ නම් සම්මත ප්‍රතිදාන ප්‍රවාහය උපකල්පනය කෙරේ, නමුත් ඔබට දෝෂ නැවත හරවා යැවිය හැකිය:

> fileනැවත යොමු කිරීම stdout ගොනුව
1> fileවෙත යළි-යොමුවීම් stdout ගොනුව
2> fileවෙත යළි-යොමුවීම් stderr ගොනු
&> fileනැවත යොමුකිරීම් stdout සහ stderr ගොනුවට

2&1> file stdout සහ stderr ගොනුවට හරවා යවයි

/dev/nullඑය ඔබට අවශ්‍ය ඕනෑම ආදානයක් ගෙන එය විසි කරයි. ඕනෑම නිමැවුමක් යටපත් කිරීමට එය භාවිතා කළ හැකිය.

සටහන 2&1>පැරණි සින්ටැක්ස් එකක් වන අතර එය තවමත් ක්‍රියාත්මක වන අතර &>එය පැරණි පද්ධති මත ක්‍රියා නොකරනු ඇත.


12
> /dev/null 2>&1සහ&> /dev/null
ඇලෙක්සැන්ඩර් මිල්ස්

19
අද ප්‍රායෝගිකව මම සිතන්නේ 2>&1පැරණි වාක්‍ය ඛණ්ඩයක් ඇති බැවින් &>වසර ගණනාවකට පෙර ක්‍රියා නොකරනු ඇති නමුත් දෙකම සමාන වේ.
වොරන් හිල්

35

කෙටියෙන් කිවහොත්, එය stderr( fd2) කළු කුහරය වෙත හරවා යවයි ( විධානයේ ප්‍රතිදානය ඉවතලයි).

යළි හරවා යැවීම සඳහා බහුලව භාවිතා වන රටාව:

command > /dev/null 2>&1 &

commandපසුබිමේ ධාවනය කරන්න , ඉවතලන්න stdoutසහstderr

command >> /path/to/log 2>&1 &

ධාවනය command, ඇතුලත් stdoutහා stderrලඝු-සටහන් ගොනුව.

Bash 4+ හි කෙටි (නමුත් අඩු කියවිය හැකි) ආකාරයක් ක්‍රියාකාරී වේ

command &>> /path/to/log

4
> /dev/null 2>&1වෙනුවට භාවිතා කිරීමට හොඳ හේතුවක් &> /dev/nullතිබේද?
ක්‍රේග් මැක්වීන්

7
RaCraigMcQueen &>Bash 4 හි අළුත් ය, කලින් තිබුනේ සාම්ප්‍රදායික ක්‍රමයයි, මම ඒ සඳහා පුරුදු වී සිටිමි (මතක තබා ගැනීම පහසුය).
ටෙරී වැන්ග්

AnswerCraigMcQueen මෙම පිළිතුර පිළිබඳ අදහස් දැක්වීමකට අනුව , &> /dev/nullසමහර කවච වල ක්‍රියා නොකරනු ඇත, නමුත්> / dev / null 2> & 1 සියලුම POSIX අනුකූල ෂෙල් වෙඩි තුළ ක්‍රියා කරයි.
යටි පතුල

3
එය 2> & 1 සහ 2 & 1> නොවන්නේ ඇයි?
මාරියන්බාඩ්

1
ඇත්තටම ප්රශ්නයක් වටිනා පෝස්ට් :-) කාරක රීති බව, @marienbad වේ fn>targetකොහේද, fnගොනු අංකය (0-2 සාමාන්යයෙන්, සමහර වැඩසටහන් වැඩි සංඛ්යා අර්ථ) සහ targetසාමාන්යයෙන් ගොනු නාමය නමුත් එය මෙහි තවත් filenumber වේ - නැරඹුමෙහි පුළුල &වන විට ඒ "මට ගොනු නාමයක් වෙනුවට ගොනු අංකයක් අවශ්‍යයි" සඳහා සින්ටැක්ස්.
මෙවලම් සාදන්නා

10

/dev/nullලිනක්ස් / යුනික්ස් හි කළු කුහරයක් ලෙස සලකනු ලැබේ, එබැවින් ඔබට මේ සඳහා ඕනෑම දෙයක් දැමිය හැකි නමුත් ඔබට එය නැවත ලබා ගත නොහැක /dev/null.

තව දුරටත්, 2>එයින් අදහස් වන්නේ ඔබ (එනම් >) stderr (එනම් 2) කළු කුහරයට (එනම් /dev/null) හරවා යවන බවයි.

ඔබේ විධානය:

grep -i 'abc' content 2>/dev/null 

මේ වගේ තවත් ඉදිරි කප්පාදුවකින් අවසන් කිරීමට උත්සාහ නොකරන්න - 2>/dev/null/(එය නාමාවලියක් නොවේ).


3

grep -i 'abc' අන්තර්ගතය මඟින් ඕනෑම දෝෂයක් ඇතුළුව ඔබේ කොන්සෝලයෙහි දර්ශනය වන ප්‍රතිදානය ජනනය කරනු ඇත.

නියම 2>/dev/nullකිරීමෙන් දෝෂ පෙරහන් වන අතර එමඟින් ඒවා ඔබේ කොන්සෝලය වෙත ප්‍රතිදානය නොවනු ඇත.

වඩාත් විස්තරාත්මකව: 2 මඟින් දෝෂ විස්තර කරන්නා නිරූපණය කරයි, එහිදී දෝෂ ලියා ඇත. පෙරනිමියෙන් ඒවා කොන්සෝලය මත මුද්‍රණය වේ.

\> මෙම අවස්ථාවේදී ප්‍රතිදානය නිශ්චිත ස්ථානයට හරවා යවයි /dev/null

/dev/null ඔබ නොසලකා හැරීමට අවශ්‍ය ප්‍රතිදානය යවන සම්මත ලිනක්ස් උපාංගය වේ.


සංක්ෂිප්ත හා මාතෘකාව මත. හොඳ පිළිතුරක්.
සර්ජි කොලොඩියාෂ්නි

0

මුලින්ම අපි >ක්‍රියාකරු ගැන කතා කළ යුතුයි . එය සංකේතයේ වමේ ප්‍රතිදානය සංකේතයේ දකුණට හරවා යවයි.

එබැවින් එය මෙසේ සිතිය යුතුය:

source_command> target_file

අප දැනගත යුතු වෙනත් දේවල්

0 means stdin 
1 means stdout(useful output)
2 means stderr(error message output)

ලෙස ප්රකෘති , එය ක්රියාcommand 1 > target_file

ලෙස /dev/null-> එය ඊට ඉවත් කර දමන්නාක් නාලිකාව නිෂ්පාදනය යළි-යොමුවීම් බව විශේෂ ගොනුවකි.

එබැවින් ඔබේ ප්‍රශ්නයේ තේරුම එයයි

විධානය ක්‍රියාත්මක කර දෝෂ පණිවිඩ මට නොපෙන්වන්න , ඒවා ඉවතලන්න .

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.