bash_dienos<p></p><p>Kai pradėjau mokytis rašyti bash skriptus, greitai supratau, kad reikia sistemingo metodo. Kaskart kurdamas naują skriptą, turėdavau jį pavadinti, suteikti vykdymo teises, sukurti alias ir atidaryti redaktoriuje. Tai tapo rutina, ir kaip bet kuri rutina, ji prašėsi automatizavimo. Taip gimė mano pirmasis ir, ko gero, svarbiausias skriptas – skriptas, kuris kuria kitus skriptus.</p><p><strong>Versija 1: Klasikinis terminalas</strong></p><p>Pradėjau nuo klasikinio terminalo varianto. Štai skriptas, pavadintas <code>create_script.sh</code>:</p><p></p> <pre>#!/bin/bash# Klausiame vartotojo failo pavadinimoread -p "Įveskite failo pavadinimą (be .sh plėtinio): " filename# Sukuriame failo keliąscript_path="$HOME/git/${filename}.sh"# Sukuriame failątouch "$script_path"# Suteikiame vykdymo teiseschmod +x "$script_path"# Sukuriame aliasecho "alias $filename='$script_path'" >> "$HOME/.bash_aliases"# Perskaitome .bash_aliases failą iš naujosource "$HOME/.bash_aliases"source "$HOME/.bashrc"# Atidarome failą su nanonano "$script_path"source "$HOME/.bash_aliases"</pre> <p>Kaip tai veikia?</p><ol><li>Skriptas klausia jūsų failo pavadinimo.</li><li>Sukuria failą <code>$HOME/git/</code> kataloge (visi mano skriptai ten).</li><li>Suteikia jam vykdymo teises su <code>chmod +x</code>.</li><li>Prideda alias į <code>.bash_aliases</code>, kad galėčiau iškviesti skriptą iš bet kur.</li><li>Iš karto įkelia naują alias su <code>source</code>.</li><li>Atidaro failą su <code>nano</code> redaktoriumi.</li></ol><p><strong>Kaip naudotis?</strong></p><p>Suteikite <code>create_script.sh</code> vykdymo teises:<br>Įsitikinkite, kad <code>$HOME/git/</code> katalogas egzistuoja.</p> <pre>chmod +x ~/git/create_script.sh</pre> <p>Paleiskite:</p> <pre>~/git/create_script.sh</pre> <p>Įveskite failo pavadinimą ir pradėkite rašyti kodą <code>nano</code> redaktoriuje.</p><p>Arba dar geriau, pridėkite jį prie sparčiųjų klavišų su komanda <code>konsole --new-tab --workdir ~ -e bash -c "~/git/create_script.sh; exec bash"</code> (aš naudoju <code>Ctrl+Shift+U</code>)</p><ol><li></li></ol><p><strong>Patobulinimai</strong></p><ul><li>Leisti pasirinkti redaktorių (vim, emacs, ir t.t.).</li><li>Pridėti parametrą, leidžiantį pasirinkti kitą katalogą, ne tik <code>~/git/</code>.</li><li>Įtraukti šablonus (pvz., <code>--type=python</code> įterptų Python šabloną).</li><li>Patikrinti, ar pavadinimas jau egzistuoja.</li></ul><p><strong>Versija 2: Grafinis vartotojo interfeisas su KDialog</strong></p><p>KDE Plasma aplinkoje turime puikių GUI įrankių. Perdariau skriptą naudodamas <code>kdialog</code>:</p> <pre>#!/bin/bash# Funkcija tikrinti, ar pavadinimas tinkamasvalidate_filename() { if [ -z "$1" ]; then kdialog --title "Klaida" --error "Pavadinimas negali būti tuščias." return 1 elif [ -e "$HOME/git/$1.sh" ]; then kdialog --title "Klaida" --error "Skriptas $1.sh jau egzistuoja." return 1 elif [[ "$1" =~ [^a-zA-Z0-9_] ]]; then kdialog --title "Klaida" --error "Pavadinimas gali turėti tik raides, skaičius ir pabraukimo brūkšnius." return 1 fi return 0}# Klausiame vartotojo failo pavadinimowhile true; do filename=$(kdialog --title "Naujas skriptas" --inputbox "Įveskite failo pavadinimą (be .sh plėtinio):") # Jei vartotojas atšaukė, išeiname if [ $? -ne 0 ]; then exit 1 fi # Tikriname pavadinimą if validate_filename "$filename"; then break fidone# Pasirenkame katalogądirectory=$(kdialog --title "Katalogo pasirinkimas" --menu "Pasirinkite katalogą:" \ 1 "$HOME/git/" \ 2 "$HOME/bin/" \ 3 "Kitas...")case $directory in 1) script_dir="$HOME/git/" ;; 2) script_dir="$HOME/bin/" mkdir -p "$script_dir" ;; 3) script_dir=$(kdialog --title "Kitas katalogas" --getexistingdirectory "$HOME") if [ $? -ne 0 ]; then exit 1 fi ;;esac# Sukuriame failo keliąscript_path="${script_dir}/${filename}.sh"# Sukuriame failą ir suteikiame teisestouch "$script_path"chmod +x "$script_path"# Pasirenkame šablonątemplate=$(kdialog --title "Šablono pasirinkimas" --radiolist "Pasirinkite šabloną:" \ 1 "Tuščias" on \ 2 "Bash" off \ 3 "Python" off \ 4 "Node.js" off)case $template in 2) echo '#!/bin/bash# Pavadinimas: '"$filename"'# Autorius: '"$USER"'# Data: '"$(date +%Y-%m-%d)"'# Aprašymas: # Kintamieji# Funkcijos# Pagrindinė programa' > "$script_path" ;; 3) echo '#!/usr/bin/env python3"""Pavadinimas: '"$filename"'Autorius: '"$USER"'Data: '"$(date +%Y-%m-%d)"'Aprašymas: """# Importai# Funkcijos# Pagrindinė programaif __name__ == "__main__": pass' > "$script_path" ;; 4) echo '#!/usr/bin/env node/** * Pavadinimas: '"$filename"' * Autorius: '"$USER"' * Data: '"$(date +%Y-%m-%d)"' * Aprašymas: */// Importai// Funkcijos// Pagrindinė programa' > "$script_path" ;;esac# Klausiame, ar pridėti į PATHif kdialog --title "Pridėti į PATH" --yesno "Ar pridėti '$script_dir' į PATH?"; then if ! grep -q "$script_dir" "$HOME/.bashrc"; then echo 'export PATH="'"$script_dir"':$PATH"' >> "$HOME/.bashrc" source "$HOME/.bashrc" kdialog --passivepopup "Katalogas pridėtas į PATH" 3 else kdialog --passivepopup "Katalogas jau yra PATH" 3 fifi# Klausiame, ar sukurti aliasif kdialog --title "Sukurti alias" --yesno "Ar sukurti alias '$filename'?"; then echo "alias $filename='$script_path'" >> "$HOME/.bash_aliases" source "$HOME/.bash_aliases" kdialog --passivepopup "Alias '$filename' sukurtas" 3fi# Rodome sėkmės pranešimąkdialog --title "Sėkmė" --msgbox "Sukurtas skriptas: $script_path"# Atidarome failą su katekate "$script_path"</pre> <p><strong>Kaip tai veikia?</strong></p><ol><li>Naudoja <code>kdialog --inputbox</code>, kad paprašytų failo pavadinimo grafinėje sąsajoje.</li><li>Sukuria failą ir suteikia teises, kaip ir anksčiau.</li><li>Prideda alias į <code>.bash_aliases</code>.</li><li>Rodo sėkmės pranešimą su <code>kdialog --msgbox</code>.</li><li>Atidaro failą su <code>kate</code>, KDE teksto redaktoriumi.</li></ol><p><strong>Kaip naudotis?</strong></p><ol><li>Įsitikinkite, kad įdiegtas <code>kdialog</code>:</li></ol> <pre>sudo apt-get install kdialog</pre> <p>Paleiskite skriptą:</p> <pre>~/git/create_script.sh</pre> <p>Arba dar geriau, pridėkite jį prie sparčiųjų klavišų (aš naudoju <code>Ctrl+Shift+I</code>). Įveskite pavadinimą grafinėje sąsajoje ir pradėkite koduoti <code>kate</code> redaktoriuje.</p><p><strong>Patobulinimai</strong></p><ol><li><strong>Pavadinimo validavimas</strong>:<ul><li>Sukūriau funkciją <code>validate_filename</code>, kuri tikrina:<ul><li>Ar pavadinimas ne tuščias.</li><li>Ar toks skriptas jau neegzistuoja.</li><li>Ar pavadinime yra tik leistini simboliai (raidės, skaičiai, pabraukimo brūkšniai).</li></ul></li><li>Jei pavadinimas netinkamas, rodomas klaidos pranešimas.</li></ul></li><li><strong>Katalogo pasirinkimas</strong>:<ul><li>Leidžiama pasirinkti iš populiarių katalogų (<code>~/git/</code>, <code>~/bin/</code>) arba bet kurio kito.</li><li>Jei pasirenkamas <code>~/bin/</code>, katalogas sukuriamas, jei jo nėra.</li></ul></li><li><strong>Šablonai</strong>:<ul><li>Galima pasirinkti iš kelių šablonų: tuščio, Bash, Python, Node.js.</li><li>Šablonai turi komentarus su autoriaus, datos ir aprašymo laukais.</li><li>Python ir Node.js šablonai turi tinkamus shebang ir bazinę struktūrą.</li></ul></li><li><strong>PATH ir alias parinktys</strong>:<ul><li>Klausiama, ar pridėti katalogą į PATH. Jei taip, eilutė pridedama į <code>.bashrc</code>.</li><li>Klausiama, ar sukurti alias. Jei taip, pridedama į <code>.bash_aliases</code>.</li><li>Naudojami <code>passivepopup</code> pranešimai, kad parodytų, jog veiksmas atliktas.</li></ul></li><li><strong>Geresnis klaidų apdorojimas</strong>:<ul><li>Jei vartotojas atšaukia bet kurį veiksmą, skriptas baigia darbą.</li><li>Jei katalogas jau yra PATH, pranešama apie tai.</li></ul></li><li><strong>Estetika ir UX</strong>:<ul><li>Naudojamas <code>--menu</code> dialogas katalogui pasirinkti.</li><li>Naudojamas <code>--radiolist</code> šablonui pasirinkti.</li><li>Naudojami <code>--yesno</code> ir <code>--passivepopup</code> paprastiems patvirtinimams.</li></ul></li></ol><p>Šie patobulinimai suteikia daugiau funkcijų ir saugumo:</p><ul><li>Išvengiama tuščių pavadinimų ir failų perrašymo.</li><li>Leidžiama lanksčiai pasirinkti katalogą ir šabloną.</li><li>Suteikiama galimybė lengvai pridėti skriptą į PATH arba sukurti alias.</li><li>Gerinamas vartotojo patyrimas su aiškiais pranešimais ir pasirinkimais.</li></ul><p>Papildomi patobulinimai galėtų būti:</p><ul><li>Git inicializavimas naujame skripte.</li><li>Daugiau šablonų (pvz., Rust, Go).</li><li>Integracija su projektų valdymo įrankiais.</li><li>Galimybė pasirinkti redaktorių (Kate, VSCode, ir t.t.).</li><li>Automatinis testavimas (pvz., <code>shellcheck</code> Bash skriptams).</li></ul><p>Šis patobulintas skriptas ne tik apsaugo nuo klaidų, bet ir suteikia daugiau galimybių, padėdamas jums greitai ir efektyviai kurti naujus skriptus pagal savo poreikius.</p><p><strong>Kodėl tai svarbu?</strong></p><ol><li><strong>Nuoseklumas</strong>: Visi skriptai tame pačiame kataloge, vienodai pavadinti.</li><li><strong>Efektyvumas</strong>: Jokio rankinio <code>chmod</code>, <code>echo</code>, <code>source</code>.</li><li><strong>Integracija</strong>: Skriptai iškart prieinami per alias.</li><li><strong>Patogumas</strong>: Tiesioginis redagavimas iš skriptų kūrėjo.</li></ol><p><strong>GUI vs Terminalas</strong></p><ul><li><strong>Terminalas</strong>: Greitas, veikia visur, nereikia papildomų paketų. Bet mažiau intuityvus.</li><li><strong>GUI</strong>: Draugiškas, informatyvus, integruotas į darbalaukį. Bet reikia įdiegti <code>kdialog</code>.</li></ul><p>Asmeniškai, aš pamėgau GUI versiją. KDE Plasma aplinkoje ji atrodo natūraliai, o pranešimai ir dialogo langai suteikia aiškumo. Be to, sparčiųjų klavišų integracija leidžia man sukurti skriptą vos keliais mygtukų paspaudimais.</p><p><strong>Išplėtimas ir pritaikymas</strong></p><ul><li><strong>Python, Node.js</strong>: Pridėkite šablonus kitiems kalboms.</li><li><strong>Git integracija</strong>: Automatiškai inicijuokite Git repozitoriją.</li><li><strong>Dokumentacija</strong>: Įterpkite komentarus su autoriaus ir datos informacija.</li><li><strong>Išmanus kelias</strong>: Skirtingi katalogai skirtingiems projektams.</li><li><strong>Atsarginės kopijos</strong>: Automatiškai kurkite <code>.bak</code> failus.</li></ul><p><strong>Pabaigai</strong></p><p>Pradėjęs nuo paprasto skripto, sukūriau įrankį, kuris dabar yra mano darbo eigos šerdis. Jis ne tik automatizuoja rutininius veiksmus, bet ir užtikrina, kad mano skriptų biblioteka būtų tvarkinga ir prieinama. Nesvarbu, ar naudojate terminalą, ar mėgstate GUI, toks skriptas gali žymiai pagerinti jūsų produktyvumą.</p><p>Svarbiausia pamoka? Pirmasis skriptas, kurį turėtumėte parašyti, yra tas, kuris padės jums kurti visus kitus. Tai tarsi statant namą – pirmiausia pasigaminate įrankius. Šis metodas ne tik pagreitina darbą, bet ir padeda išlaikyti tvarką, o tai ypač svarbu augant jūsų skriptų kolekcijai.</p><p>Tad nesvarbu, ar esate pradedantysis, ar patyręs, pagalvokite apie savo darbo eigą. Raskite pasikartojančias užduotis ir automatizuokite jas. Ilgainiui šie maži patobulinimai gali turėti didžiulį poveikį. Ir viskas prasideda nuo to pirmojo skripto – to, kuris padeda kurti visus kitus.</p><p><a href="https://funkcijos.wordpress.com/2024/06/05/pradekime-nuo-pradziu-skriptas-kuris-kuria-skriptus/" class="" rel="nofollow noopener noreferrer" target="_blank">https://funkcijos.wordpress.com/2024/06/05/pradekime-nuo-pradziu-skriptas-kuris-kuria-skriptus/</a></p><p><a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://funkcijos.wordpress.com/tag/kdialog/" target="_blank">#kdialog</a></p>