අපි පාඩම් අටක් පුරාවට දැන් ගොඩක් දේවල් ඉගෙනගෙන තියෙන්නෙ. අද අපි අලුත් දෙයක් ගැන කතා කරමු. ඔයාලා bash commands ගැන දැන් දන්නවනෙ. ඔය කමාන්ඩ්ස් එකින් එක run කර කර ලොකු වැඩක් කරගන්න එක අසීරුයි.

සංකීර්ණ ක්‍රියාවලියක් නැවත නැවත සිදු කරන්න අවශ්‍ය නම්, අපි ඒකට පාවිච්චි කරනවා Shell Scripting කියන ක්‍රමවේදය. Shell එකක් කියන්නෙ මොකක්ද කියලා කලින් අපි කතා කළා. Script එකක් කියන්නෙ programming language එකකින් ලිව්ව program එකක් වගේ දෙයක්. අපි මේවා ලියන language එකට programming language එකක් කියලා කියන්නෙ නෑ. ඒකට අපි කියන්නෙ scripting language එකක් කියලා.

Bash නොහොත් Bourne Again Shell එක Scripting සඳහා සහයෝගය දක්වනවා. Bash Shell එක සඳහා කරන scripting අපි bash scripting කියලා හඳුන්වනවා.

හොඳයි, එහෙනම් හඳුන්වාදීම අවසානයි. අපි පාඩමට යමු. Shell Scripting ප්‍රායෝගිකව පටන්ගන්න කලින්, පොඩි තියරි ටිකක් තියේ, ඒ ටික කවර් කරගනිමු. නැත්නම් ඉදිරියෙදි අනාත වෙනවා. දැන් මතක තියාගන්න ඕන දේ තමයි, මේ පසුබිම හදන්නෙ Bash Scripting වලට කියන දේ.

Input/Output Redirection

CLI programs වල බොහොම ප්‍රභල feature එකක් තමයි මේ I/O redirection කියන්නෙ. මේක අපි

  1. Standard Output
  2. Standard Input
  3. Standard Error

කියන කොටස් තුනට බෙදාගෙන සාකච්ඡා කරමු. එතකොට මේ කියන දේ වටහාගන්න පහසු වේවි.

Standard Output (stdout)

සාමාන්‍යයෙන්, Standard Output එකෙන් කරන්නෙ content එකක් display කරන එක. අපිට අවශ්‍ය නම් ඒ display එක file එකකට ලියවන්න පුළුවන් > මෙන්න මේ දකුණට හැරවුණ angle brace සංකේතය පාවිච්චි කරලා.

ls > file.txt

මේ උදාහරණයේ විදියට, ls command එක run වෙලා එන ප්‍රතිඵලය file.txt කියන ෆයිල් එකට යවනවා. මෙතනදි මුකුත් result එකක් අපිට පරිගණක තිරයෙන් බලාගන්න වෙන්නෑ, මොකද ls එකෙන් දුන්න output එක අපි > මේකෙන් හරවලා ෆයිල් එකකට යවපු නිසා.

ඔයා මේ උඩින් දුන්න කමාන්ඩ් එක run කරවන හැම වතාවකම file.txt එකේ කලින් save වුණ text එක මැකිලා තමයි ලියවෙන්නෙ. ඒ කියන්නෙ overwrite වීමක් තමයි වෙන්නෙ. ඒක එහෙම නොවී, append වෙන්න නම්, ඒ කියන්නෙ ෆයිල් එකේ දැනට තියෙන කන්ටෙන්ට් එක යටට අලුතින් ලියවෙන ඒවා එකතු කරන්න නම් >> මේ සංකේතය භාවිතා කරන්න වෙනවා.

ls >> file.txt

Standard Output කතාව ඕකයි.

Standard Input (stdin)

CLI එකකට inputs දෙන්න සාමාන්‍යයෙන් අපි පාවිච්චි කරන්නෙ Keyboard එකනෙ. නමුත් කලින් අපි file එකකට output එකක් save කළා වගේම අපිට පුළුවන් file එකක content එකක් ඒ ෆයිල් එක read කරලා ඒක input එකක් විදියට ලබාගන්න. ඒකට අපි පාවිච්චි කරන්නෙ < මෙන්න මේ වමට හැරවුණ angle brace එක.

sort < file.txt

දැන් අපි මේ උදාහරණය පැහැදිලි කර ගනිමු. අපි මෙතනදි file.txt කියන file එක කියවලා ඒකෙ කන්ටෙන්ට් එක අරගන්නවා. ඊට පස්සෙ, ඒ කන්ටෙන්ට් එක redirect කරනවා, නැත්නම් හරවලා යවනවා sort කියන command එකට. Sort එකෙන් වෙන්නෙ මොකක් හරි input කළාම ඒක ඉංග්‍රීසි අකාරාදී පිළිවෙලට හදලා output කරන එක. මේකෙදි input එක වෙන්නෙ file content එක නිසා output එක විදියට file content එකේ තියෙන text එක alphabetical order එකට හදලා තිරයට output කරනවා.

දැන් අපි හිතමු, මේ screen එකට ආව output එක අපි ආයෙත් අලුත් file එකකට යවන්න ඕන. මොකක්ද කමාන්ඩ් එක? දැන් අනුමාන කරගන්න පුළුවන් වෙන්න ඕන.

sort < file.txt > sorted.txt

sorted.txt කියන්නෙ අපි අලුතින් හදාගත්ත File එකේ නම. ඔයා මේ දැක්කා වගේ, අපිට පුළුවන් තනි කමාන්ඩ් එකක Standard input සහ output කියන ආකාර දෙකම භාවිතා කරන්න.

Standard Error (stderr)

අපි මේක පාවිච්චි කරන්නෙ Output එකේ තියෙන error messages කොහෙට හරි හරවන්න. එතකොට ලස්සන output එකක් ගන්න පුළුවන්. ඒ වගේම අපිට පුළුවන් Errors ටික log file එකකට save කරගන්නත්. මේකට ටිකක් වෙනස් විදියක ක්‍රමවේදයක් භාවිතා කරන්න වෙනවා. අපි උදාහරණයක් අරන් පැහැදිලි කරගනිමු.

මුලින්ම අපි අපේ Home directory එකේ file දෙකක් හදාගනිමු. ඒවා හදාගන්න දැන් දන්නවනෙ, මම කලින් කියලා දුන්නා. ඒවයෙ ඔයා කැමති දෙයක් ටයිප් කරලා සේව් කරගන්න. ඊට පස්සෙ ඒ දෙකම එකපාරට cat කරගමු.

cat file1.txt file2.txt

මේක run කරාම file දෙකේම content එක පිළිවෙලට screen එකට output වෙනවා. ඊළඟට අපි එක ෆයිල් එකක් මකනවා, නැත්නම් rename කරනවා. මම file2.txt කියන file එක rename කළා. දැන් ආයෙත් අර උඩ command එක run කරවන්න.

එතකොට අපිට එනවා error එකක්. No such file or directory කියලා. අපි දැන් මේ error එක display නොවී, වෙනම errorlog.txt කියලා file එකකට redirect කරමු.

cat file1.txt file2.txt 2> errorlog.txt

මේක run කළාම screen එකේ error එකක් පෙන්නන්නේ නෑ. Home directory එකේ errorlog.txt කියලා file එකක් හැදිලා ඒකට error එක save වෙනවා. ඕන නම් ඒ errorlog.txt ෆයිල් එක cat කරලා බලන්න.

දැන් ඔයාලට මෙතනදි ප්‍රශ්ණයක් එන්න ඕන මොකක්ද මේ 2 කියලා. ඒක මෙහෙමයි.

ඕකට අපි කියන්නෙ File Descriptor එක කියලා. Unix වලදි හැම file එකකටම file descriptor number එකක් ලබාදෙනවා. Unix වලදි හැමදෙයක්ම file එකක් නෙ. Command run කරවද්දි මේ වගේ ප්‍රධාන files තුනක් යොදාගන්නවා. ඒ මෙන්න මේවා.

මේ ෆයිල් program එකක් run වෙන හැම වෙලාවකදි භාවිතා වෙනවා.

මේ පාඩමේ මුළදි Standard input සහ output වලදි අපි descriptor number එක භාවිතා නොකළත් error එකේදි ඒක භාවිතා කරන්න වෙනවා, මොකද එහෙම නොකළොත් අපිට අවශ්‍ය standard error එක ගන්න බැරි වෙනවා, මොකද > මේක අපි පාවිච්චි කරනවා stdout එකටත්. ඔයාලා stdin සහ out දෙකටත් descriptor number එක භාවිතා කරලා කලින් commands run කරවන්න උත්සාහ කරන්න. එතකොට පහසුවෙන් මේ ගැන අවබෝධයක් ලබාගන්න පුළුවන්.

හොඳයි, අපි මූලික න්‍යායන් ටිකක් වගේම practical ටිකකුත් අද ඉගෙනගත්තා. අපි ඊළඟ දවසෙ තවත් මූලික theory ටිකක් cover කරගනිමු. ඊටත් පස්සෙ අපි යමු Bash Scripting වලට.  අදට සමුගනිමු. ඔබට ජය!