Bash Scripting - Δουλέψτε έξυπνα με λίγο (δικό σας) κώδικα | Μέρος 2 | Γραφικά



Διαβάστε εδώ το πρώτο μέρος της σειράς 

Στο πρώτο μέρος των οδηγών για το bash scripting είδαμε πως θα δημιουργούμε και πως θα εγκαθιστάμε σκριπτάκια που θα διευκολύνουν τη ζωή μας.





Zenity 

Σε αυτό το δεύτερο μέρος, θα δούμε πως θα φτιάξουμε πιο «φιλικά» στους χρήστες σκριπτάκια, χρησιμοποιώντας γραφικό περιβάλλον, μιας και για όλους τους χρήστες το διπλό κλικ για την εκτέλεση ενός προγράμματος είναι πάντα πιο εύκολο από την εκκίνηση μέσω τερματικού.



Για την δημιουργία γραφικών παραθύρων στο bash χρησιμοποιείται κυρίως το zenity.
Αφού το εγκαταστήσετε μέσω του διαχειριστή πακέτων σας (αν δεν είναι ήδη εγκατεστημένο), μπορείτε να δείτε τι μπορεί να κάνει δίνοντας
zenity --help
Θα σας εμφανιστούν όλες οι λειτουργίες του. Για να το δοκιμάστε δεν χρειάζεται καν αν ξεκινήσετε ένα σκριπτάκι. Στην γραμμή εντολών μπορείτε να δώσετε για παράδειγμα:

zenity --question --text "όλα καλά?"
Το παρακάτω παράθυρο διαλόγου θα εμφανιστεί.


Το αν η απάντηση θα είναι "Νο" ή "Yes" δεν έχει σημασία αυτή τη στιγμή. Όπως μπορείτε να δείτε στο --help υπάρχουν πολλές ακόμα επιλογές όπως πεδίο εισόδου κειμένου από τον χρήστη, μήνυμα σφάλματος, παράθυρο εισαγωγής κωδικού ακόμα και ημερολόγιο. 
Αν θέλετε να λάβετε πληροφορίες για το πως θα συντάξετε την εντολή του zenity για κάθε ξεχωριστό παράθυρο χρησιμοποιείται να ειδικά options, όπως φαίνονται στο zenity --help.



Αξίζει να σημειωθεί πως αν δεν εισάγουμε την παράμετρο --text για να βάλουμε κάποιο κείμενο, για παράδειγμα,  το zenity θα βάλει αυτόματα το προεπιλεγμένο κείμενο. 

I need an idea

Μιας και στο προηγούμενο άρθρο ασχοληθήκαμε με μετατροπές βίντεο σε mp3, ας μείνουμε στο ίδιο  αντικείμενο. Η εφαρμογή που θα φτιάξουμε θα κάνει τα εξής:
  • Θα βρίσκει το τελευταίο .mp4 αρχείο που έχει εισαχθεί σε κάποιον φάκελο της επιλογής μας (στο συγκεκριμένο παράδειγμα ο φάκελος θα είναι ίδιος με τον φάκελο που βρίσκεται και εκτελείται το σκριπτάκι μας. Μπορούμε να προσδιορίσουμε τον φάκελλο βάζοντας μία cd στον φάκελο που θέλουμε, όπως κάναμε στο προηγούμενο άρθρο).
  • Θα μας ρωτάει γραφικά αν θέλουμε να γίνει η μετατροπή του σε mp3
  • Αν απαντήσουμε θετικά, θα το μετατρέπει (εμφανίζοντάς μας μια μπάρα προόδου), αλλιώς θα τερματίζει.
  • Τέλος θα μας ρωτάει αν θέλουμε να σβήσουμε το αρχικό mp4 αρχείο


Let's do it!

Αρχικά, το πρόγραμμα θα βρίσκει το τελευταίο mp4 αρχείο που μπήκε στον φάκελο, «σκανάροντας ένα ένα τα αρχεία που τελειώνουν σε .mp4!

               for f in *.mp4
                               do
                                       if [ -z "$NEWEST" ]
                                       then
                                            NEWEST=$f
                                       elif [ "$f" -nt "$NEWEST" ]
                                              then
                                       NEWEST=$f
                                               fi
                                done

Κάνοντας μία απλή δοκιμή στο παραπάνω κομμάτι κώδικα, θα διαπιστώσουμε πως αν δεν υπάρχει mp4 αρχείο στον κατάλογο η μεταβλητή NEWEST παίρνει την τιμή *.mp4. Διαφορετικά παίρνει κανονικά το όνομα του αρχείου. Μπορούμε να εκμεταλλευτούμε το γεγονός αυτό για να εμφανίσουμε το αντίστοιχο μήνυμα για τον εντοπισμό ή όχι mp4 αρχείου:


                         if [ "$NEWEST" ==  "*.mp4" ]; then
                                    zenity --error --text="Δεν βρέθηκε κανένα mp4 αρχείο!"
                                    exit 0
                         else
                                 zenity --info --text="Εντοπίστηκε το αρχείο $NEWEST. Πάτα ΟΚ για μετατροπή"


Αν λοιπόν δεν βρεθεί mp4 τελικά εμφανίζεται το κατάλληλο μήνυμα και η εφαρμογή μας τερματίζεται με την exit 0. Στην συνέχεια τώρα (στο else δηλαδή) θα κάνουμε την μετατροπή με την εντολή:

                              ffmpeg -i "$NEWEST" "$NEWEST.mp3"  | zenity --progress --pulsate --auto-close


Απαραίτητη προϋπόθεση να υπάρχει το ffmpeg εγκατεστημένο στον υπολογιστή που τρέχουμε το πρόγραμμα. Στο ffmpeg βάζουμε σαν παράμετρο μία μπάρα προόδου η οποία θα γεμίζει μέχρι να ολοκληρωθεί η μετατροπή.
Τέλος θα μας γίνεται η ερώτηση για το σβήσιμο του αρχικού mp4 αρχείου:


                                     zenity --question --text "Θες να σβηστεί το βίντεο?"
                                      if [ $? -eq 0 ]; then
                                              rm "$NEWEST"
                                      fi
                             fi

(*) Παρατηρήστε το πως χειριζόμαστε την απάντηση στο "No" ή το "Υes" του χρήστη στο παράθυρο διαλόγου. Στην μεταβλητή ? αποθηκεύεται το 0 αν η απάντηση είναι θετική και το 1 αν είναι αρνητική!

Μπορείτε να δείτε ολόκληρη την εφαρμογή εδώ!

Μπορείτε να μάθετε τα πάντα για το zenity διαβάζοντας το εγχειρίδιο το οποίο μάλιστα είναι μεταφρασμένο στα ελληνικά από την ελληνική κοινότητα του gnome. 











Σχόλια

Δημοφιλείς αναρτήσεις από αυτό το ιστολόγιο

Phet – εικονικά πειράματα ανοικτού κώδικα

Fedora Weekend [18-19 Οκτωβρίου]

Εγκατάσταση CUDA για GPU υποστήριξη στο Tensorflow