BAT – Ένας κλώνος του cat με συντακτικό χρωματισμό, paging και git integration

dimitris | Τρί, 03/15/2022 - 14:22 | 5'

Αν χρησιμοποιείτε Linux για κάμποσο καιρό, σίγουρα ξέρετε την εντολή cat με την οποία βλέπουμε τα περιεχόμενα ενός αρχείου στο Τερματικό. Όμως η cat απλώς “τυπώνει” ό,τι έχει μέσα το αρχείο, χωρίς έξτρα φρου-φρου. Εδώ έρχεται το bat, ένα ακόμα εργαλείο της γραμμής εντολών που κάνει τα ίδια πράγματα με τη cat αλλά με συντακτικό χρωματισμό, paging, αρίθμηση γραμμών και git integration. Δεν είναι προεγκατεστημένο στο Linux αλλά εγκαθίσταται πανεύκολα στις περισσότερες διανομές Linux.

Το bat υποστηρίζει τις περισσότερες γλώσσες προγραμματισμού (C/C++, JS, Python κλπ), γλώσσες markup (html, md κλπ) και format αρχείων (π.χ. JSON) και προβάλλει τον κώδικα με όλη την ομορφιά που έχουμε συνηθίσει σε προηγμένους text editors.

Π.χ. Python

Python

Javascript

Javascript

JSON

JSON

Ωραίο, έτσι; Και εμφανίζει αυτόματα τους αριθμούς γραμμών. Εκτός από τον συντακτικό χρωματισμό, το bat "μιλάει" με το git (αν το αρχείο ανήκει σε κάποιο repository) για να δείξει ό,τι αλλαγές έχουμε κάνει σε σχέση με το τελευταίο commit (με + οι νέες γραμμές, με ~ οι αλλαγές):

git

Α, και το ωραίο με την bat είναι ότι έχει αυτόματο paging, αν το αρχείο είναι μεγαλύτερο από μια οθόνη. Δηλαδή στέλνει τα περιεχόμενα αυτόματα σε έναν pager όπως η εντολή less ώστε να μη χρειάζεται να κάνουμε εμείς πια το γνωστό:

cat longfile.cpp | less

αλλά να αρκεί απευθείας:

bat longfile.cpp

Και, voila, το bat κάνει αυτόματα το paging για εμάς. Γλυτώνεις 7 χτυπήματα στο πληκτρολόγιο κάθε φορά, δεν το λες και λίγο :)

Φυσικά, το bat εξακολουθεί υποστηρίζει και όλα τα γνωστά κόλπα του cat όπως το concatenation:

bat header.md content.md footer.md > document.md

Επίσης, στα έξτρα του bat πρέπει να σημειώσουμε τη δυνατότητα να δείχνει μη-εκτυπώσιμους χαρακτήρες με την παράμετρο -A, π.χ. με την bat -A  ~/path/to/main.cpp βλέπω να τυπώνονται τα εξής:

non-printing chars

Tip: Επειδή οι αριθμοί των γραμμών και τα χρώματα του συντακτικού χρωματισμού μπορούν να δημιουργήσουν προβλήματα όταν κάνετε redirect το output του bat σε κάποιο άλλο πρόγραμμα, καλό είναι να έχετε υπόψη την παράμετρο -p, η οποία πρακτικά ακυρώνει όλα αυτα και τυπώνει απλό κείμενο όπως ακριβώς θα έκανε η cat. Εναλλακτικά, αν έχετε εγκατεστημένη την xclip,  στέλνετε το αποτέλεσμα στην xclip και "καθαρίσατε":

bat main.cpp | xclip

Εγκατάσταση του bat

Αντίθετο με την cat, το bat δεν είναι προεγκατεστημένο στο Linux αλλά υπάρχει στα αποθετήρια των περισσότερων διανομών και εγκαθίσταται πανεύκολα. Στο Ubuntu 22.04 και Debian 11 υπάρχει η έκδοση 0.12.1 που εγκαθίσταται με:

sudo apt install bat

Προσοχή όμως: Αν εγκαταστήστε το bat με αυτόν τον τρόπο, τότε η εντολή γίνεται batcat και όχι bat (γιατί υπάρχει κάποιο άλλο πρόγραμμα με το ίδιο όνομα).

Εναλλακτικά όμως, μπορείτε και ίσως είναι πιο εύκολο να κατεβάσετε το πακέτο του bat από το Github (https://github.com/sharkdp/bat/releases) όπου θα βρείτε και την πιο πρόσφατη έκδοση, η οποία υποστηρίζει ακόμα περισσότερα file formats. A, ναι, υπάρχει έκδοση και για Windows/MacOS. :)

 

Δώσε αστέρια!

MO: 4.5 (ψήφοι: 2)