I sistemi operativi, ormai da parecchi anni, si orientano sempre di più verso interfacce grafiche facili da utilizzare per l'utente, che non lo costringono a ricordare lunghe liste di comandi (come accadeva ai tempi del DOS). Per esempio, il menù delle applicazioni di Gnome permette di eseguire facilmente un'applicazione senza che sia necessario sapere qual è il comando associato.
Tuttavia, in alcune situazioni, è comunque utile conoscere il comando che viene eseguito cliccando su una voce del menù: per esempio, perché dovete far partire un'applicazione durante una sessione ssh avviata da un altro computer, e quindi non avete accesso al menù. Oppure, perché per qualche motivo devete formattare, e volete salvare l'elenco dei programmi installati. E magari vi interessa l'elenco non tanto di tutti i programmi installati (questo potreste ottenerlo con il comando
rpm -qa1), ma solo di quelli presenti nel menù, che conoscete attraverso il nome ivi utilizzato. Di solito giocate a Forza 4, non a four-in-a-row. O, per essere più precisi, non sapete affatto di eseguire four-in-a-row (una volta si chiamava gnect!) quando giocate a Forza 4.
Con Gnome 2, perlomeno per le applicazioni presenti sulla barra dei preferiti, era possibile, utilizzando il tasto destro e selezionando la voce 'Proprietà', conoscere il comando associato alla singola applicazione. Metodo non molto comodo se vi serve la lista completa, e comunque non utilizzabile con Gnome 3.
Se volete comunque conoscere l'elenco dei comandi associati alle applicazioni del menù, potete installare dalla pagina menuapps.html il programma menuapps. Oppure, eseguite da terminale uno dei seguenti script (dovete fare il copia e incolla di TUTTO lo script, anche se qui lo visualizzate su più righe):
PROGRAMMA1=; find /usr/share/applications/ ~/.local/share/applications -name "*.desktop" | while read FILE; do grep "Exec=" "$FILE" | while read RIGA; do if [ "$RIGA" == "${RIGA/TryExec=/}" ]; then RIGA="${RIGA/Exec=/}"; echo "$RIGA"; fi; done; done | sort | while read PROGRAMMA2; do if [ "$PROGRAMMA2" != "$PROGRAMMA1" ]; then echo "$PROGRAMMA2"; PROGRAMMA1="$PROGRAMMA2"; fi; done
Attendete 1-2 secondi, ed avrete il vostro elenco visualizzato sul terminale. Se volete l'elenco dei comandi "puri", senza parametri (per esempio, volete che venga visualizzato /usr/bin/gparted, e non /usr/bin/gparted %f), digitate quanto segue:
PROGRAMMA1=; find /usr/share/applications/ ~/.local/share/applications -name "*.desktop" | while read FILE; do grep "Exec=" "$FILE" | while read RIGA; do if [ "$RIGA" == "${RIGA/TryExec=/}" ]; then RIGA="${RIGA/Exec=/}"; let N=`expr index "$RIGA" " "`; if [ $N \> 0 ]; then RIGA=${RIGA:0:$N-1}; fi; echo "$RIGA"; fi; done; done | sort | while read PROGRAMMA2; do if [ "$PROGRAMMA2" != "$PROGRAMMA1" ]; then echo "$PROGRAMMA2"; PROGRAMMA1="$PROGRAMMA2"; fi; done
Se preferite salvare l'elenco su un file (per esempio, in un file chiamato applicazioni.txt e posto sulla scrivania), aggiungete alla fine del comando, sulla stessa riga,
>~/Scrivania/applicazioni.txt.
Se, infine,
vi interessa l'associazione tra il nome visualizzato nel menù e il comando che viene eseguito, salvando il tutto nel solito file applicazioni.txt sulla scrivania,
eseguite (sempre facendo il copia e incolla di TUTTO lo script, anche se qui lo visualizzate su più righe
):
PROGRAMMA1=; LANG="it"; find /usr/share/applications ~/.local/share/applications -type f -name "*.desktop" | while read FILE;
do
PROGRAMMA=`egrep "Exec=|Name=|Name\[$LANG\]=" "$FILE" | while read RIGA; do if [ "${RIGA:0:4}" == "Exec" ] || [ "${RIGA:0:4}" == "Name" ]; then echo -n "$RIGA"$'\t'; fi; done`;
PROGRAMMA=${PROGRAMMA:0:${#PROGRAMMA}-1}; COMANDO=; NOME=; INIZIO="$PROGRAMMA"; FINE=;
let N=`expr index "$PROGRAMMA" $'\t'`;
if [ $N \> 0 ]; then
let LEN=`expr length "$PROGRAMMA"`;
let LEN=LEN-N;
let M=N-1;
INIZIO=`expr substr "$PROGRAMMA" 1 $M`;
let M=N+1;
FINE=`expr substr "$PROGRAMMA" $M $LEN`;
fi;
if [ "${INIZIO:0:5}" == "Exec=" ]; then
COMANDO="${INIZIO:5}";
elif [ "${INIZIO:0:5}" == "Name=" ]; then
NOME="${INIZIO:5}";
elif [ "${INIZIO:0:9}" == "Name[$LANG]=" ]; then
NOME="${INIZIO:9}";
fi;
if [ $N \> 0 ]; then
let N=`expr index "$FINE" $'\t'`;
if [ $N \> 0 ]; then
let M=N-1;
INIZIO=`expr substr "$FINE" 1 $M`;
let LEN=`expr length "$FINE"`;
let LEN=LEN-N;
let M=N+1;
FINE=`expr substr "$FINE" $M $LEN`;
fi;
if [ "${INIZIO:0:5}" == "Exec=" ]; then
COMANDO="${INIZIO:5}";
elif [ "${INIZIO:0:5}" == "Name=" ] && [ "$NOME" == "" ]; then
NOME="${INIZIO:5}";
elif [ "${INIZIO:0:9}" == "Name[$LANG]=" ]; then
NOME="${INIZIO:9}";
fi;
if [ "${FINE:0:5}" == "Exec=" ]; then
COMANDO="${FINE:5}";
elif [ "${FINE:0:5}" == "Name=" ] && [ "$NOME" == "" ]; then
NOME="${FINE:5}";
elif [ "${FINE:0:9}" == "Name[$LANG]=" ]; then
NOME="${FINE:9}";
fi;
fi;
echo "La voce di menù \`"$NOME"\` esegue il comando \`$COMANDO\`.";
done | sort | while read PROGRAMMA2; do if [ "$PROGRAMMA2" != "$PROGRAMMA1" ]; then echo "$PROGRAMMA2"; PROGRAMMA1="$PROGRAMMA2"; fi; done >~/Scrivania/applicazioni.txt
Ah, dimenticavo... Se vi interessa un programma particolare (per esempio, la calcolatrice), inserite alla fine dell'ultimo script, al posto di
>~/Scrivania/applicazioni.txt,
| grep -i "calcolatrice".
Dovreste ottenere il seguente output:
La voce di menú `
Calcolatrice` esegue il comando `gcalctool`.
Nota bene: rilascio tutti gli script presenti in questa pagina sotto
licenza gpl, senza nessuna garanzia, ma con la speranza di risultare utile a qualcuno.