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.
Purtroppo sul mio Ubuntu 10.10 non ha funzionato: ginstall-info mi genera sempre un file troncato, come quello che mostri nel post.
RispondiEliminaHo risolto così: dato che che nella directory /usr/share/info c'era un dir.old che funzionava se copiato sopra dir, l'ho svuotato cancellando tutto ciò che seguiva la riga "* Menu:" ed ho poi lanciato il ciclo for che suggerivi.
Il problema potrebbe consistere nel fatto che la sequenza che appare nel file dir come "^_" in realtà non è una sequenza, ma un carattere di controllo, che per via di un bug ginstall-info non ricrea come carattere di controllo ma come sequenza, col risultato che info non la trova. Invece, se è già presente nel file ginstall-info apparentemente si comporta bene.
In termini procedurali, per rigenerare /usr/share/info/dir ho dato i seguenti comandi:
sudo -i
head -15 /usr/share/info/dir.old > /usr/share/info/dir
for file in /usr/share/info/*.{gz,info} /usr/share/info/*/*.{gz,info}; do ginstall-info "$file" /usr/share/info/dir ; done
exit
Ora info è a posto.
Grazie per la soluzione.
Anche a me non veniva ricreato correttamente il file `dir' se mantenevo la vecchia versione, per questo l'ho rimossa. In realtà nella guida suggerisco di rinominarla per salvare una copia di backup (inutile visto che info non funziona con quel file dir), l'importante era cancellarlo. Comunque grazie per aver condiviso la tua soluzione :)
RispondiEliminaCiao!
Grazie per queste preziose informazioni. Basandomi su queste ho realizzato un piccolo script per semplificare la risoluzione al problema di info.
RispondiEliminaLe istruzioni e il file da scaricare si trovano all'indirizzo:http://www.ubaweb.it/miniguide/info_non_va.php.
Buon Linux a tutti
Salve, informo che ho modificato lo script, (vedi sopra) ora consente la scelta di una procedura completamente automatica o volendo, anche il metodo manuale.
RispondiEliminaIl link è nel commento precedente.
Spero sia utile a qualcuno.
Ciao! 8-)
bravo Giovanni! :D risolto in 2 sec, grazie!
EliminaBuon Linux
@Giovanni: grazie per la segnalazione. Ho aggiunto un link al tuo sito nel post.
RispondiEliminaCiao!
salve
RispondiEliminache dire, grazie mille
augurandoTi un felice Anno
un bacio
Erika
@Erika: sono felice di essere stato utile.
RispondiEliminaCiao e tanti auguri anche a te :-)
Copiato lo script, reso eseguibile, lanciato da root...funziona tutto alla perfezione, grazie a Giovanni.
RispondiEliminaUn solo piccolo appunto, quando la procedura termina si potrebbe automatizzare l'uscita al prompt di bash invece che dover premere CTRL-C, che dite?
Grazie di nuovo e ciao
Simone
tutto ok. Grazie
RispondiEliminaSe non fosse sufficiente (io ho la ubuntu 11.10 e non va...), fate:
RispondiEliminasudo gedit /usr/sbin/update-info-dir
eliminate le righe UNSET e mettete al loro posto:
export LC_ALL=POSIX
poi rilanciate con: sudo /usr/sbin/update-info-dir
ciampix
Per te non è sufficiente la riga `unset LANG'?
EliminaComunque, come ho segnalato qui, ho suggerito su Launchpad una nuova traduzione italiana del messaggio incriminato che dovrebbe correggere il problema, chissà se verrà mai accettata.
Ciao
Grandissimo ciampix.
EliminaA me (con Ubuntu 11.10) funziona togliendo
unset LANG
e aggiungendo
export LC_ALL=POSIX
(nota: avendo fatto delle prove, funziona grazie a "export LC_ALL=POSIX" togliendo o mettendo "unset LANG" non cambia nulla. Mentre se non c'è "export LC_ALL=POSIX" non funziona)
Grazie,
Cristian
Sei un dio. Erano più di 2 settimane che mi perdevo tra milioni di entry inutili di ubuntuforums
RispondiEliminaÈ un problema legato solo alla traduzione in italiano di un messaggio del pacchetto texinfo di Ubuntu (nelle altre distribuzioni forse non esiste neanche la traduzione italiana di questo pacchetto), probabilmente questo è il motivo per il quale su ubuntuforums (che non penso sia molto frequentato dagli italiani) non sei riuscito a trovare la soluzione ;-)
EliminaCiao!
ottimo post grazie! Risolto in 1 minuto :D
EliminaLinux Rocks!
:D
Ossignùr... ad oggi non lo hanno ancora sistemato, nemmeno in Debian. Significa forse che info non lo usa più nessuno?
RispondiEliminaInizio a pensare anche io che nessuno usi più le info. La cosa un po' assurda è che la soluzione esiste e, in particolare su Launchpad, è stata spiegata più volte, ma sembra che proprio non riesca a trovare la strada per essere applicata. Mah
EliminaFinalmente! su Ubuntu 14.04 sembra che il bug sia stato eliminato...anni per risolvere una bischerata di questo genere!
RispondiEliminaMeglio tardi che mai.
Ciaux
Buono a sapersi, grazie per la segnalazione!
Elimina