CLI 101: usare un programma custom su Unix
Una "non così breve" guida
L'idea sarebbe quella di spiegarti come si prende un programma Python, o un qualunque script (anche shell) e si trasforma in un programma che puoi usare quando e dove vuoi nella CLI (senza neanche dover specificare il percorso)! La guida può essere utile per quando vuoi automatizzare un compito che ti trovi a fare spesso da terminale o vuoi utilizzare un programma che hai scritto te stesso nella CLI! (il programma poi può interagire con altri strumenti Unix, per cui puoi usare "cron" per farlo eseguire ad ogni ora etc..., o lo puoi usare come servizio all'avvio del sistema, o puoi analizzare l'output di un altro programma e darlo in pasto al tuo programma etc... le possibilità sono infinite).
La guida mostra i passaggi per Void Linux (quindi per sistemi GNU/Linux in generale), non è detto che funzioni allo stesso identico modo su MacOs, ma sono abbastanza fiducioso che funzioni).
Of course. I'm a Terminator!
Prima di tutto, dobbiamo decidere cosa fa il nostro programma e come chiamarlo... per esempio, lo possiamo chiamare "terminator" e possiamo fargli aggiungere "You are terminated!" all'inizio di un test e "Of course. I'm a Terminator!" alla fine (è una cosa che mi capita di fare spesso). Adesso si può procedere a creare il file e scrivere il codice:
mkdir terminator
cd terminator
touch terminator
Nota* "touch terminator" è il comando per creare il file Python (come si nota, non ci ho messo l'estensione .py, non è necessaria l'estensione nei sistemi Unix). Si può procedere a modificare il contenuto del file con un editor a tua scelta.
#!/usr/bin/env python3
text = input()
print(f'You are TERMINATED {text} - Of course. I\'m a Terminator.')
Nota* Quel #! all'inizio si chiama "shebang", e si usa per specificare alla shell con quale programma deve aprire il file. Nel nostro caso, in particolare, gli stiamo dicendo che il file va letto e interpretato con Python3. A questo punto dobbiamo solo trasformare il file in un file eseguibile!
chmod +x terminator
./terminator
Nota* Con "chmod +x terminator" stiamo dicendo di aggiungere il permesso di esecuzione (+x) al file "terminator". Alla riga sotto, stiamo eseguendo il file per vedere se funziona!
Collegamenti simbolici
Adesso, il problema che abbiamo è che bisogna specificare ogni volta il percorso del file per poterlo eseguire, perché la shell non sa dove andare a cercare quando gli passiamo come comando "terminator"! Per fortuna, abbiamo la variabile d'ambiente $PATH dalla nostra parte!
echo $PATH
Il comando echo $PATH ti fa vedere cosa c'è dentro alla variabile $PATH, e sono tutta una serie di percorsi in cui la shell va a cercare un comando, quindi basta mettere il programma dentro ad una di quelle directory perché sia riconosciuto. Nel mio caso, o comunque in generale, quello che si preferisce fare è creare un "collegamento simbolico" dentro a una delle directory nelle $PATH (si, proprio come i collegamenti Desktop di Windows). Altre soluzioni includono: mettere il file direttamente dentro a una di quelle cartelle, ad esempio /usr/local/bin/, oppure modificare la variabile $PATH stessa e aggiungere la cartella dove sta il tuo programma (nel mio caso ~/terminator/).
cd /usr/local/bin
sudo ln -s ~/terminator/terminator terminator
Nota* il primo parametro del comando ln -s è il percorso del tuo programma, il secondo parametro è il nome del collegamento simbolico.
You are terminated!
Ora puoi usare il tuo comando dove e come vuoi. Puoi entrare in qualunque directory e usare terminator come comando! Molto probabilmente (mi sto accorgendo ora), terminator non è stato un buon nome per il nostro programma, considerando che il mio window manager (i3) pensava che fosse il mio terminale, quindi ogni volta che premevo la shortcut Alt+Invio mi apriva terminator e non il mio terminale