info
. Come spiegai in uno dei primi post di questo blog, per consultare da terminale i manuali (se presenti) dei comandi si può usare man
:man nomecomandoIn aggiunta a
man
, molti programmi (soprattutto del progetto GNU) forniscono una guida (spesso più completa del manuale consultabile con man
) che può essere letta con info
: info nomecomandoIn questi giorni, dando il comando (per esempio)
info coreutils(per leggere la guida delle principale utilità di sistema, chiamate appunto coreutils) ricevo dal terminale questa risposta:
info: Impossibile trovare il nodo «Top».Il messaggio in lingua inglese è il seguente:
info: Cannot find node `Top'.
Il problema è che per qualche motivo si è corrotto il file /usr/share/info/dir
che contiene (o, nel mio caso, dovrebbe contenere) l'elenco dei manuali che possono essere consultati con info
. Il mio file /usr/share/info/dir
conteneva solo questo:Questo è il file .../info/dir, che contiene il nodo più in alto della gerarchia di Info, chiamata (dir)Top. La prima volta che invochi il programma Info esso parte da questo nodo. ^_ File: dir, Node: Top\tQuesto è il nodo più alto dell'albero INFO Questo (il nodo principale) fornisce un menù che contiene le voci principali. Digitando "q" esce, digitando "?" si produce un elenco di tutti i comandi Info, "d" ritorna alla presente schermata, "h" fornisce informazioni ai nuovi utenti, "mEmacs<return>" visualizza il manuale di Emacs, ecc. All'interno di Emacs, puoi cliccare con il pulsante sinistro del mouse su una voce di menù o su un riferimento incrociato per selezionarlo. * Menu:Come vedete, manca l'elenco dei manuali disponibili, che invece dovrebbe essere presente dopo la riga
* Menu:
.Per risolvere il problema si può cancellare il file incriminato e rigenerarlo con il comando da terminale
install-info
(in Debian, Ubuntu e derivate bisogna richiamare il comando con ginstall-info
). install-info
accetta come primo argomento il file (in genere questi file hanno estensione .info
e potrebbero essere compressi con gzip) che contiene il manuale che si vuole aggiungere all'elenco (questi file in genere si trovano nella cartella /usr/share/info/
e sue sottocartelle), come secondo argomento il file di elenco (cioè /usr/share/info/dir
). Queste due operazioni possono essere automatizzate con i due seguenti comandi (richiedono i diritti di amministratore perché si modificherà un file di sistema):sudo mv /usr/share/info/dir ~/dir for file in /usr/share/info/*.{gz,info} /usr/share/info/*/*.{gz,info}; do sudo install-info "$file" /usr/share/info/dir; doneSe usate sistemi, come Debian o Ubuntu, che richiedono
ginstall-info
al posto di install-info
, il secondo dei comandi precedenti va cambiato infor file in /usr/share/info/*.{gz,info} /usr/share/info/*/*.{gz,info}; do sudo ginstall-info "$file" /usr/share/info/dir ; doneBreve spiegazione dei comandi consigliati: il primo comando (
mv
) serve per spostare il file nella propria home, conservando una copia di sicurezza (anche se il file è corrotto non fa male creare una copia, dopo aver risolto il problema la copia può essere tranquillamente cancellata); il secondo esegue un ciclo for su tutti i file con estensioni .gz
o .info
presenti nella cartella /usr/share/info
sue sottocartelle. Se in questo modo non dovessero essere inclusi alcuni file di manuali, potete farlo manualmente tramite install-info
(o ginstall-info
) con la sintassi esposta precedentemente.Aggiornamento importante: dopo il commento di Zio LoneWolf (che ringrazio) mi sono accorto che la questione era più complicata di quanto mi sembrasse inizialmente. Per risolvere il problema non è affatto sufficiente usare i comandi presentati in precedenza perché pare che sia presente un bug nella traduzione italiana di Texinfo. Si può aggirare (e questa volta per davvero) il problema impostando nella shell la lingua inglese e poi utilizzando nuovamente i comandi precedenti:
LANG=en_US.UTF-8 for file in /usr/share/info/*.{gz,info} /usr/share/info/*/*.{gz,info}; do sudo install-info "$file" /usr/share/info/dir; doneoppure
LANG=en_US.UTF-8 for file in /usr/share/info/*.{gz,info} /usr/share/info/*/*.{gz,info}; do sudo ginstall-info "$file" /usr/share/info/dir; doneL'aggiornamento del file
/usr/share/info/dir
può anche essere fatto con il comando update-info-dir
(dato come al solito con privilegi di amministratore). Si può fare in modo che questo script utilizzi sempre la lingua inglese senza doverla impostare manualmente ogni volta. Aprite con il vostro editor di testo preferito (e con i diritti di amministratore) lo script /usr/sbin/update-info-dir
. Per esempio con gedit si userà:gksudo gedit /usr/sbin/update-info-dirA questo punto inserite la stringa
unset LANG # https://bugs.launchpad.net/ubuntu/+source/texinfo/+bug/707931(nel commento c'è un riferimento alla segnalazione del bug su Launchpad) per esempio dopo il rigo
unset LANGUAGE
Dopo di ciò sarà possibile aggiornare il file /usr/share/info/dir
semplicemente con il comandosudo update-info-dirAltro aggiornamento: Giovanni segnala nei commenti che ha realizzato uno script per risolvere automaticamente il problema. Trovate lo script e le istruzioni per l'uso sul sito sito: http://www.ubaweb.it/miniguide/info_non_va.php.