27 – ආදාන/ප්‍රතිදාන (input/output) ගමනාන්තය වෙනස් කිරීම (redirection) (1 කොටස)

සාමාන්‍ය තත්ත්ව යටතේ command line හි සම්මත ආදානය (input) ලෙස යතුරු පුවරුව (keyboard) ද සම්මත ප්‍රතිදානය (output) ලෙස පරිගණක තිරය (screen/monitor) ද භාවිතා කරනු ලැබේ. Linux ගොණු පද්ධතිය (file system) තුළ මේවා පිළිවෙලින් stdin සහ stdout ලෙස හඳුනාගත හැකිය. මීට අමතර ව සම්මත දෝශ ප්‍රතිදානය (error output) ලෙස stderr යන්න යොදාගනී. කිසියම් command එකක් ක්‍රියාත්මක වීමේදී දෝශ පණිවුඩ (error messages) දර්ශණය කිරීමට stderr භාවිතා වේ. සාමාන්‍යයෙන් stderr හි ප්‍රතිදානය (output) ද screen එක වෙත යොමුකර ඇති නිසා error messages තිරය (screen) මත දැකගත හැකිය. Linux මෙහෙයුම් පද්ධතිය තුළ සෑම දෙයක් ම file (ගොණුවක්) ලෙස සැලකෙන බැවින් redirect කිරීම ඉතා පහසුය.

සටහන: stdin, stdout සහ stderr යනු file system තුළ භාවිතා වන files බව සැකහැර දැන ගැනීමට අවශ්‍ය නම් /dev directory වෙත පිවිස ls command ලබාදෙන්න. තවද Linux file system මගින් මේවා සම්මත ලෙස නිරුපණයට 0, 1 සහ 2 යන ඉලක්කම් ලබාදීම සිදු කරයි.

stdin, stdout & stderr
stdin, stdout & stderr

ඉහත දැක්වූ ආදාන/ප්‍රතිදාන (input/output) උපක්‍රම පරිගණකයේ සාමාන්‍ය කටයුතු සඳහා ප්‍රමාණවත් වන අතර වඩාත් සංකීර්ණ කාර්යයන් සඳහා නම්‍යශීලි ලෙස භාවිතා කිරීමේ හැකියාව ද ඇත. එයට හේතුව නම් Linux යනු බොහෝ දුරට සේවාදායක පරිගණක (server computers) වල ධාවනයට නිර්මාණය කර ඇති මෙහෙයුම් පද්ධතියක් (operating system) වීමයි. මේ සඳහා input/output අපට අවශ්‍ය ගමනාන්තයකට යොමු කිරීමේ (redirect) හැකියාව shell මගින් ලබාදේ. Command line හි මේ සඳහා සංකේත (symbols) යොදාගන්නා අතර විවිධ commands මගින් input/output හැසිරවීමේ හැකියාව ද පවතී. Symbols සහ commands භාවිතා කර input/output redirect කිරීම සිදුකරන ආකාරය දැක්වීම මෙම ලිපි පෙළෙහි අරමුණ වේ.

සංකේත (symbols) යොදාගෙන output redirect කිරීම

කිසියම් විධානයක (command) output එක වෙනත් ගොණුවක් වෙත යොමු කිරීමට > යොදාගත හැකිය. මෙහිදී > යන්නට පසුව output එක redirect වියයුතු ගොණුවේ මාර්ගය (file path) ලබාදිය යුතුය. ලබාදෙන path එකෙහි එම නමින් file එකක් නොමැති නම් එය ඉබේම  නිර්මාණය වන අතර දැනටමත් පවතින file එකකට redirect කලහොත් file content (අන්තර්ගතය) වෙනුවට අලුත් output එක ලියැවේ (overwrite). කෙසේ නමුත් stderr හරහා දිස්වන දෝෂ පණිවුඩ (error messages) > මගින් redirect නොවේ. මේ නිසා command ක්‍රියාත්මක වීමේදී කිසියම් දෝෂයක් (error) ඇති වුවහොත් හිස් ගොණුවක් (empty file) පමණක් නිර්මාණය වේ. මෙම උපක්‍රමය භාවිතා කරමින් file content මකා දැමීමේ කෙටි ක්‍රමයක් ලෙස > සමග අවශ්‍ය filename ලබාදීම කල හැකිය. අවශ්‍ය නම් command එක ලබානොදී සිටීමට පිළිවන. Output redirect කිරීමට අදාළ ව උදාහරණ කිහිපයක් පහත දැක්වේ.

Output redirect
Output redirect

ඉහත දැක්වූ පරිදි දැනටමත් තිබෙන file එකක් overwrite කිරීම වෙනුවට අපගේ output එක file එකේ අගට එකතු කිරීමට (append) >> යොදාගත හැකිය. මෙහිදීද අදාළ file එක නොපවතී නම් එය අලුතින් නිර්මාණය වීම සිදුවේ.

Append output
Append output

දෝෂ ප්‍රතිදාන (error output) පමණක් redirect කිරීමට විශේෂිත symbol එකක් නොමැති අතර ඉහතින් දැක්වූ පරිදි file system මගින් stderr සඳහා ලබාදෙන හඳුනා ගැනීමේ අංකය මෙහිදී යොදාගැනේ. ඒ අනුව දෝෂ පණිවුඩ (error messages) redirect කිරීමට 2> යන්න භාවිතා කරනු ලැබේ. 2>> මගින් file එක අගට error messages එකතු කිරීම (append) කල හැකිය.

Error redirection
Error redirection

stdout සහ stderr එකවර redirect කිරීමට සිදුවන අවස්ථා ද බොහෝවිට එළඹේ. මෙහිදී ක්‍රම දෙකකට අදාළ කාර්යය ඉටුකර ගැනීමට පිළිවන. මින් පළමු ක්‍රමයේදී error output එක stdout වෙත යොමු කිරීම සිදුවේ. මේ සඳහා යොදාගන්නා රීතිය (syntax) පහත දැක්වේ. මෙහිදී අනුපිළිවෙල (order) ඉතා වැදගත් ය.

command > output_file 2>&1

දෙවැනි ක්‍රමය වඩා සරළ වන අතර &> හෝ &>> යොදා ගනිමින් stdout සහ stderr එකවර redirect  කල හැකිය. අදාළ රීතිය පහත පරිදි වේ.

command &> output_file
command &>> output_file

කිසියම් අවස්ථාවක output එක දර්ශනය වීම වැලක්වීමට අවශ්‍ය නම් /dev/null වෙත redirect කිරීම කල හැකිය. එමගින් output එක අවලංගු වීම සිදුවේ.

Redirect to /dev/null
Redirect to /dev/null

 

ප්‍රතිචාරයක් ලබාදෙන්න

Fill in your details below or click an icon to log in:

WordPress.com Logo

ඔබ අදහස් දක්වන්නේ ඔබේ WordPress.com ගිණුම හරහා ය. පිට වන්න /  වෙනස් කරන්න )

Google photo

ඔබ අදහස් දක්වන්නේ ඔබේ Google ගිණුම හරහා ය. පිට වන්න /  වෙනස් කරන්න )

Twitter picture

ඔබ අදහස් දක්වන්නේ ඔබේ Twitter ගිණුම හරහා ය. පිට වන්න /  වෙනස් කරන්න )

Facebook photo

ඔබ අදහස් දක්වන්නේ ඔබේ Facebook ගිණුම හරහා ය. පිට වන්න /  වෙනස් කරන්න )