'>' පිළිබඳ අනතුරු ඇඟවීම
I / O යළි හරවා යැවීම ( <
සහ >
) ගැන ඉගෙන ගෙන ඇති යුනික්ස් ආරම්භකයින් බොහෝ විට වැනි දේ උත්සාහ කරති
විධානය … input_file > the_same_file
හෝ
විධානය … < ගොනුව > the_same_file
හෝ, බොහෝ දුරට සමානව,
cat file | විධානය …> the_same_file
( grep
, sed
, cut
, sort
, හා spell
ජනතාව මේ වගේ නිර්මාණය කරන භාවිතා කිරීමට පෙළඹෙනු ඇති බව විධාන උදාහරණ වේ.) පරිශීලකයන් මෙකී හිස් බවට පත් වෙමින් ගොනුව ප්රතිඵලය බව සොයා ගැනීමට පුදුමයට පත් වේ.
අනෙක් පිළිතුරෙහි සඳහන් නොවන බව පෙනෙන සූක්ෂ්ම බාෂ් (1) හි යළි-යොමුවීමේ කොටසේ පළමු වාක්යයේ සැඟවී ඇති බව සොයාගත හැකිය :
විධානයක් ක්රියාත්මක කිරීමට පෙර, එහි ආදානය සහ ප්රතිදානය
කවචය මගින් අර්ථ නිරූපණය කරන විශේෂ අංකනයක් භාවිතා කර හරවා යවනු ලැබේ .
පළමු වචන පහක් නිර්භීත, තද පැහැ ඇළ අකුරු විය යුතුය, නිමේෂ රතු පාට, සහ සළකුණු විශාල අවධාරනය කලේය, අයිකනය, ෂෙල් කිරිමටද ඉල්ලා හරවා යැවීමේ (ව) බව අවධාරණය කිරීමට
මෙම විධානය පෙර ක්රියාත්මක වන . මතක තබා ගන්න
ප්රතිදානය නැවත හරවා යැවීම ගොනුව ලිවීමට විවෘත වේ…. ගොනුව නොපවතී නම් එය නිර්මාණය වේ; එය පවතින්නේ නම් එය ශුන්ය ප්රමාණයට කපා ඇත.
ඉතින්, මෙම උදාහරණයේ:
sort roster > roster
වැඩසටහන ක්රියාත්මක roster
වීමට පෙර කවචය ලිවීම සඳහා ගොනුව විවෘත කරයි , එය කප්පාදු කරයි (එනම් එහි සියලුම අන්තර්ගතයන් ඉවතලයි) sort
. ස්වාභාවිකවම, දත්ත නැවත ලබා ගැනීමට කිසිවක් කළ නොහැක.
යමෙකුට එය බොළඳ ලෙස බලාපොරොත්තු විය හැකිය
tr "[:upper:]" "[:lower:]" < poem > poem
වඩා හොඳ විය හැකිය. කවචය වමේ සිට දකුණට හරවා යැවීම් හසුරුවන හෙයින්, එය ලිවීම සඳහා විවෘත කිරීමට පෙර (සම්මත ප්රතිදානය සඳහා) poem
කියවීම සඳහා ( tr
සම්මත ආදානය සඳහා) විවෘත වේ. නමුත් එය උදව් කරන්නේ නැත. මෙම මෙහෙයුම් අනුක්රමය ගොනු හැසිරවීම් දෙකක් ලබා දුන්නද, ඒවා දෙකම එකම ගොනුවකට යොමු කරයි. කවචය කියවීම සඳහා ගොනුව විවෘත කළ විට, අන්තර්ගතය තවමත් පවතී, නමුත් වැඩසටහන ක්රියාත්මක කිරීමට පෙර ඒවා තවමත් වසා දමනු ලැබේ.
ඉතින්, ඒ ගැන කුමක් කළ යුතුද?
විසඳුම් වලට ඇතුළත් වන්නේ:
ඔබ ක්රියාත්මක කරන වැඩසටහනට ප්රතිදානය යන්නේ කොතැනටද යන්න සඳහන් කිරීමේ හැකියාවක් තිබේද යන්න පරීක්ෂා කරන්න. මෙය බොහෝ විට -o
(හෝ --output=
) ටෝකනයකින් දැක්වේ. විශේෂයෙන්,
sort roster -o roster
දළ වශයෙන් සමාන වේ
sort roster > roster
හැර, පළමු අවස්ථාවේ දී, sort
වැඩසටහන ප්රතිදාන ගොනුව විවෘත කරයි. සියලු ආදාන ගොනුව (ය) කියවා අවසන් වන තුරු ප්රතිදාන ගොනුව විවෘත නොකිරීමට එය දක්ෂයි .
ඒ හා සමානව, අවම වශයෙන් සමහර අනුවාද sed
ඇති -i
(සංස්කරණය i ආදාන ගොනුව (නැවත, නැවත ප්රතිදානය ලියන්න යොදා ගත හැකි බව n ස්ථානය) විකල්පය පසු සියලු ආදාන කියවා ඇති). වැනි සංස්කාරකවරුන්ට ed
/ ex
, emacs
, pico
, සහ vi
/ vim
සංස්කරණය කිරීම සඳහා පරිශීලක පෙළ ගොනුවක් ඉඩ සහ මුල් ගොනුවේ සංස්කරණය පෙළ සුරකින්න. ed
(අවම වශයෙන්) අන්තර්ක්රියාකාරී නොවන ලෙස භාවිතා කළ හැකි බව සලකන්න .
vi
ආශ්රිත අංගයක් ඇත. ඔබ ටයිප් කළහොත් , එය සංස්කරණ බෆරයේ අන්තර්ගතය ලිවීමට , ප්රතිදානය කියවීමට සහ එය බෆරයට ඇතුළු කරනු ඇත (මුල් අන්තර්ගතය වෙනුවට).:%!command
Entercommand
සරල නමුත් effective ලදායී:
විධානය … input_file > temp_file && mv temp_file input_file
මෙහි ඇති අඩුපාඩුව නම්, input_file
සබැඳියක් නම්, එය (බොහෝ විට) වෙනම ගොනුවකින් ප්රතිස්ථාපනය වනු ඇත. එසේම, පෙරනිමි ආරක්ෂණ සහිතව නව ගොනුව ඔබ සතු වේ. විශේෂයෙන්, මෙය ගොනුව මුල් පිටපත input_file
නොවුනත් , ලෝක කියවිය හැකි බවට පත්වීමේ අවදානම දරයි .
වෙනස්කම්:
command … input_file > temp_file && cp temp_file input_file && rm temp_file
එය තවමත් (විභවයෙන්) temp_file
ලෝකයට කියවිය හැකි වනු ඇත. ඊටත් වඩා හොඳයි:
cp input_file temp_file && command … temp_file > input_file && rm temp_file
මේවා ගොනුවේ සම්බන්ධක තත්ත්වය, හිමිකරු සහ මාදිලිය (ආරක්ෂාව) ආරක්ෂා කරයි. (
ගුණාංග ආරක්ෂා කර ගැනීම සඳහා ඔබට එය පැවසීමට -a
හෝ ඊට සමාන විකල්පයක් භාවිතා කිරීමට අවශ්ය විය හැකිය .)-p
cp
command … input_file > temp_file &&
cp --attributes-only --preserve=all input_file temp_file &&
mv temp_file input_file
(කියවීමට පමණක් වෙනම රේඛාවලට බෙදී ඇත) මෙය ගොනුවේ මාදිලිය ආරක්ෂා කරයි (සහ, ඔබ root නම්, හිමිකරු), නමුත් එය ඔබට අයිති කර ගනී (ඔබ මූල නොවේ නම්), සහ එය නව එකක් බවට පත් කරයි, වෙනම ගොනුවක්.
මෙම බ්ලොගය
(“ස්ථානගත” ගොනු සංස්කරණය කිරීම) යෝජනා කරයි සහ පැහැදිලි කරයි
{rm input_file && විධානය …> input_file ; input < input_file
මේ සඳහා command
සම්මත ආදානය සැකසීමට හැකියාව තිබිය යුතුය (නමුත් සියලුම පෙරහන් පාහේ කළ හැකිය). බ්ලොග් අඩවියම මෙය අවදානම් සහගත ගැටයක් ලෙස හඳුන්වන අතර එහි භාවිතය අධෛර්යමත් කරයි. තවද මෙය ඔබට අයත් සහ පෙරනිමි අවසරයන් සහිත නව වෙනම ගොනුවක් (කිසිවක් සමඟ සම්බන්ධ නොවේ) නිර්මාණය කරයි.
Moreutils පැකේජයට විධානයක් ඇත sponge
:
විධානය … input_file | ස්පොන්ජ් the_same_file
වැඩි විස්තර සඳහා මෙම පිළිතුර බලන්න .
මෙන්න මට සම්පූර්ණ පුදුමයක් ඇති වූ දෙයක්:
syntaxerror පවසයි :
[මෙම විසඳුම් බොහෝ] "කියවීමට පමණක්" ඔබගේ ඒ කියන්නෙ එය කියවීමට පමණක් ගොනු පද්ධතිය, මත අසාර්ථක වනු ඇත $HOME
ඇත , ලිවිය-හැකි ගොනුවක් විය, නමුත් /tmp
කරනු ලැබේ කියවීමට පමණක් (පෙරනිමියෙන්). උදාහරණයක් ලෙස, ඔබට උබුන්ටු තිබේ නම් සහ ඔබ ප්රතිසාධන කොන්සෝලය තුළට පිවිස තිබේ නම්, මෙය සාමාන්යයෙන් සිදුවේ. එසේම, මෙහි ලේඛනයක් ක්රියාකරු <<<
එහි එක්කෝ, එය අවශ්ය ලෙස ක්රියා නොකරනු ඇත /tmp
වීමට කියවීම් / ලිවීම්
එය මෙන්ම එහි බවට තාවකාලික ගොනුවක් ලිවීමට ඇත නිසා.
(cf. මෙම ප්රශ්නයටstrace
'd ප්රතිදානය ඇතුළත් වේ )
පහත දැක්වෙන කරුණු එම අවස්ථාවේ දී ක්රියාත්මක විය හැකිය:
ඉතින්, ප්රශ්නය කුමක්ද?
මෙය යූ ඇන්ඩ් එල් හි ජනප්රිය මාතෘකාවක් වී තිබේ. එය පහත සඳහන් ප්රශ්න වලින් ආමන්ත්රණය කෙරේ:
… එය සුපිරි පරිශීලකයෙකු හෝ උබුන්ටු අසන්න නොවේ. ඉහත ප්රශ්න වලට පිළිතුරු වලින් මම බොහෝ තොරතුරු මෙම පිළිතුරට ඇතුළත් කර ඇත, නමුත් සියල්ලම නොවේ. (එනම්, වැඩි විස්තර සඳහා, ඉහත ලැයිස්තුගත ප්රශ්න සහ ඒවායේ පිළිතුරු කියවන්න.)
PS මා ඉහත සඳහන් කළ බ්ලොග් අඩවිය සමඟ මට කිසිදු සම්බන්ධයක් නැත .