View previous topic :: View next topic |
Author |
Message |
akiross Veteran
Joined: 02 Mar 2003 Posts: 1170 Location: Mostly on google.
|
Posted: Mon Aug 30, 2004 10:03 pm Post subject: Auto completamento dei comandi su BASH |
|
|
Salve!
Ho una domanda:
se io scrivo "gnome" su bash e premo tab 2 volte, mi esce l'elenco di tutti i comandi eseguibili che iniziano con "gnome". Ok, auto completamento
La mia domanda era su una cosa specifica: quando io premo tab, sostanzialmente l'ouput viene elaborato e poi grazie al tool more io posso vederlo una riga alla volta, giusto?
E come posso fare in modo che il tool di visualizzazione (more in questo caso) venga sostituito con uno che dico io? (ad esempio less o addirittura GREP per la ricerca di parole chiave)
grazie
ciao _________________ Libera scienza in libero stato.
Horizon of Events
Last edited by akiross on Tue Aug 31, 2004 1:02 pm; edited 2 times in total |
|
Back to top |
|
|
FonderiaDigitale Veteran
Joined: 06 Nov 2003 Posts: 1710 Location: Rome, Italy
|
Posted: Mon Aug 30, 2004 10:13 pm Post subject: |
|
|
Code: | export PAGER=comandotuo |
_________________ Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica
|
|
Back to top |
|
|
akiross Veteran
Joined: 02 Mar 2003 Posts: 1170 Location: Mostly on google.
|
Posted: Mon Aug 30, 2004 10:31 pm Post subject: |
|
|
ahh grazie
ciauz! _________________ Libera scienza in libero stato.
Horizon of Events |
|
Back to top |
|
|
akiross Veteran
Joined: 02 Mar 2003 Posts: 1170 Location: Mostly on google.
|
Posted: Mon Aug 30, 2004 10:41 pm Post subject: |
|
|
No, non mi funziona:
export PAGER=less
ls <tab><tab>
eppure l'elenco e' ancora con more
che succede? devo mettere l'export in profile?
ciauz _________________ Libera scienza in libero stato.
Horizon of Events |
|
Back to top |
|
|
FonderiaDigitale Veteran
Joined: 06 Nov 2003 Posts: 1710 Location: Rome, Italy
|
Posted: Tue Aug 31, 2004 12:01 am Post subject: |
|
|
Code: | export PAGER=/usr/bin/less >> /etc/profile |
_________________ Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica
|
|
Back to top |
|
|
shev Bodhisattva
Joined: 03 Feb 2003 Posts: 4084 Location: Italy
|
Posted: Tue Aug 31, 2004 7:33 am Post subject: |
|
|
Akiross, vedo che ultimamente ti stai lanciando in parecchie di queste domande "di base". Se vuoi un piccolo consiglio, scaricati e tieni sottomano gli Appunti di Informatica Libera di Giacomini, rispondono sicuramente a tutte queste tue domande, in modo approfondito e completo. Risparmierai un sacco di tempo (per quanto velocissimo sia questo forum ) ma soprattutto troverai un bel po' di spunti e novità che non ti saresti mai sognato. Li chiamano "La Bibbia" non per nulla _________________ Se per vivere ti dicono "siediti e stai zitto" tu alzati e muori combattendo |
|
Back to top |
|
|
randomaze Bodhisattva
Joined: 21 Oct 2003 Posts: 9985
|
Posted: Tue Aug 31, 2004 8:13 am Post subject: |
|
|
shev wrote: | Akiross, vedo che ultimamente ti stai lanciando in parecchie di queste domande "di base" |
In realtà se non ho capito male il thread non chiedeva una "cosa di base" ma "una cosa impossibile" (a meno di non ravanare con i sorgenti di bash e implementarci dentro il less!) _________________ Ciao da me! |
|
Back to top |
|
|
akiross Veteran
Joined: 02 Mar 2003 Posts: 1170 Location: Mostly on google.
|
Posted: Tue Aug 31, 2004 9:36 am Post subject: |
|
|
Shev chai ragione mi dimentico sempre della bibbia e spesso mi salva. l'ho anche stampata tutta mica per niente...
okioki mi scuso. mi arrangio (diciamo che avrei potuto farlo da subito, come tutto insomma, ma se non faccio cosi' come lo alzo il numero dei post?? Arrivo a 1337 e poi smetto )
in ogni caso... quali sono le atre domande di base??
Bene, ho gia messo solved sul titolo, non chiedero' altro in questo thread. Anche se dovro' toccare i sorgenti di bash _________________ Libera scienza in libero stato.
Horizon of Events |
|
Back to top |
|
|
akiross Veteran
Joined: 02 Mar 2003 Posts: 1170 Location: Mostly on google.
|
Posted: Tue Aug 31, 2004 10:28 am Post subject: |
|
|
No, difatti la Bibbia non sembra spiegare cio' che interessa a me.
A quanto sembra il comando ls non legge la variabile d'ambiente PAGER, pertanto dovrei modificare i codici
Mi documento bene su ls e poi vedo se toccare il codice di bash e fare questa modifica
grazie comunque a tutti
ciauz _________________ Libera scienza in libero stato.
Horizon of Events |
|
Back to top |
|
|
FonderiaDigitale Veteran
Joined: 06 Nov 2003 Posts: 1710 Location: Rome, Italy
|
Posted: Tue Aug 31, 2004 10:30 am Post subject: |
|
|
non vedo cosa ci sia di strano.
impossibile non e' affatto.. se vedi il man di bash vedi tranquillamente che si puo riconfigurare tranquillamente l'autocompletamento; inoltre se emergi bash-completion e vai a editare /etc/bash-completion trovi un sacco di esempi pratici.. io tra le altre cose lo uso per intabellare i file tgz con tar<tab> _________________ Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica
|
|
Back to top |
|
|
MyZelF Bodhisattva
Joined: 25 Feb 2003 Posts: 2010 Location: Venice, Italy
|
Posted: Tue Aug 31, 2004 10:46 am Post subject: |
|
|
Comunque bash di per sè non permette di specificare gran che:
man bash wrote: |
[...]
Readline Variables
Readline has variables that can be used to further customize its behav-
ior. A variable may be set in the inputrc file with a statement of the
form
set variable-name value
Except where noted, readline variables can take the values On or Off.
The variables and their default values are:
[...]
page-completions (On)
If set to On, readline uses an internal more-like pager to dis-
play a screenful of possible completions at a time.
|
o mi sono perso qualcosa? _________________ "Larry the Cow was a bit frustrated at the current state of Linux Distributions..." |
|
Back to top |
|
|
FonderiaDigitale Veteran
Joined: 06 Nov 2003 Posts: 1710 Location: Rome, Italy
|
Posted: Tue Aug 31, 2004 10:57 am Post subject: |
|
|
forse non sono stato molto chiaro, faccio un esempio.
con bash si puo' riscrivere del tutto le routine di completamento, e sono documentate in man bash (non ricordo il paragrafo, vedere qualcosa come COMPLETION)
l'esempio seguente completa la routine service esattamente come fa redhat, e il tab funziona sia sul nome del servizio che sull'azione.
Code: |
function _listservices { # get tab completion for services and options
local cur
local opt
COMPREPLY=()
opt=${COMP_WORDS[2]}
cur=${COMP_WORDS[COMP_CWORD]}
if [ -z $opt ] ; then
COMPREPLY=( $( /bin/ls -1 /etc/init.d/ | grep ^$cur ) )
else
COMPREPLY=( $( compgen -W 'start stop restart pause zap status' | grep ^$cur) )
fi
}
complete -F _listservices service
|
chiaramente va inserito in un file sul quale viene fatto sourcing all'avvio della shell (/etc/profile, ~/.bashrc per lo piu)
gli esempi sarebbero innumerevoli, spero di avere reso il concetto. _________________ Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica
|
|
Back to top |
|
|
akiross Veteran
Joined: 02 Mar 2003 Posts: 1170 Location: Mostly on google.
|
Posted: Tue Aug 31, 2004 11:04 am Post subject: |
|
|
Ti riferisci alla Programmable Completion?
comunque calma ragazzi ho detto che guardavo, tutto qua
Dicevo solo che la variabile PAGER non e' quella che fa al caso mio, e che quindi avrei guardato. Se non era possibile avrei editato il codice di bash, ma a quanto pare e' possibile.
Ciauz _________________ Libera scienza in libero stato.
Horizon of Events |
|
Back to top |
|
|
MyZelF Bodhisattva
Joined: 25 Feb 2003 Posts: 2010 Location: Venice, Italy
|
Posted: Tue Aug 31, 2004 11:05 am Post subject: |
|
|
@fonderia: ok, ho capito cosa intedevi.
@akiross: tienici informati sugli esiti del taroccamento... _________________ "Larry the Cow was a bit frustrated at the current state of Linux Distributions..." |
|
Back to top |
|
|
shev Bodhisattva
Joined: 03 Feb 2003 Posts: 4084 Location: Italy
|
Posted: Tue Aug 31, 2004 12:01 pm Post subject: |
|
|
akiross wrote: | Dicevo solo che la variabile PAGER non e' quella che fa al caso mio, e che quindi avrei guardato. Se non era possibile avrei editato il codice di bash, ma a quanto pare e' possibile |
Indipendentemente da questo, devo ricredermi. Sia sulla domanda, che non era proprio così banale, sia perchè ne è nata una discussione sicuramente interessante! Quindi sorry, e grazie del topic
Cmq il mio post non era un richiamo o un invito a non postare, tutt'altro, era un consiglio spassionato: io uso tantissimo gli appunti, quindi penso possano essere comodi in situazioni non troppo particolari o approfondite (caso che sembrava coinvolgere la tua domanda, ma non era proprio così. Il solved nel titolo, dopo i post di fonderia m'avevano fatto credere che ti servisse proprio tale variabile, documentata sugli appunti). Quando intervengo come moderatore solitamente aggiungo tag del tipo [mod] _________________ Se per vivere ti dicono "siediti e stai zitto" tu alzati e muori combattendo |
|
Back to top |
|
|
akiross Veteran
Joined: 02 Mar 2003 Posts: 1170 Location: Mostly on google.
|
Posted: Tue Aug 31, 2004 1:01 pm Post subject: |
|
|
Ok, la cosa si prospetta piu' complicata di quanto non sembri, oppure sono io che essendo appena entrato nell'ottica la vedo complessa.
Sostanzialmente posso affermare questo:
Bash ha una procedura per l'individuazione dell'auto completamento. Cio' significa che premendo tab parte una certa routine preimpostata che verificando le opzioni fornite da complete e compgen fornisce il famoso elenco dei file o directory
Ora, a parte la faccenda delle opzioni e dei comandi che non spiego, potete vedere l'entita' della cosa semplicemente facendo un
potete vedere l'elenco delle associazioni.
In sostanza bash associa ad ogni parola (esempio ls, grep, cat eccetera) una certa funzione e' predisposta per il completamento.
Questo vuol dire che grep, ls, cat eccetera non hanno una sola funzione per il completamento, ma 3 diverse, al contrario di quello che pensavo.
In realta' pero', internamente a bash il set di funzioni che si occupa del completamento e' ristretto, quindi e' possibile modificarne solo 1 (o rifarla da 0) per modificare il comportamento di piu' comandi.
Ad esempio:
Code: |
akiross@tallon4 akiross $ complete -p | grep "_filedir"
complete -o filenames -F _filedir_xspec elinks
complete -o filenames -F _filedir_xspec freeamp
complete -o filenames -F _filedir_xspec playmidi
complete -o filenames -F _filedir_xspec bzdiff
complete -o filenames -F _filedir_xspec rgview
complete -o filenames -F _filedir_xspec realplay
complete -o filenames -F _filedir_xspec xine
complete -o filenames -F _filedir_xspec xpdf
...
|
Quindi basterebbe sostituire _filedir_xspec per modificare i risultati della ricerca (in sostanza se ho capito bene -F indica la funzione che esporta i vaolori possibili per l'auto completamento)
Solo che, in tutto questo ambaradan, non ho ancora capito se e' possibili cambiare il comando di visualizzazione dal famoso "more-like" ad un altro.
In effetti leggendo i man di complete e compgen non mi sembra che si parli di questo particolare, poiche' questi due servono solamente a generare l'elenco dei possibili completamenti.
Ho dato anche un occhio ai file di bash-competion ma anche li non ho visto niente di specifico per quanto riguarda il pager.
Devo ancora leggere molto del manuale di bash, e fare anche qualche ricerca, ma questo non sembra fare al caso mio.
Ciauz
EDIT:
@shev: si in effetti ho messo solved ancora prima di sperimentare la variabile PAGER. Mi sono tuffato perche' questa l'avevo gia sentita e quindi credevo che la risposta di fonderia fosse adatta al mio caso, mi mi son sbagliato. Quindi ho tolto solved, e finche' non trovo come cambiare quel pager non credo che lo rimettero' _________________ Libera scienza in libero stato.
Horizon of Events |
|
Back to top |
|
|
FonderiaDigitale Veteran
Joined: 06 Nov 2003 Posts: 1710 Location: Rome, Italy
|
Posted: Tue Aug 31, 2004 6:37 pm Post subject: |
|
|
tornando al caso dell'esempio specifico che citi (ovvero ls), quando ls ha troppe possibilita' da mostrare chiama in causa readline per mostrare le entry. per cui, per modificare il comportamento di visualizzazione, dovresti settare delle variabili di ambiente, e metterle in ~/.inputrcnella formaper tutta la lista _________________ Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica
|
|
Back to top |
|
|
akiross Veteran
Joined: 02 Mar 2003 Posts: 1170 Location: Mostly on google.
|
Posted: Tue Aug 31, 2004 7:13 pm Post subject: |
|
|
Si, si e' gia parlato di questo.
In man bash c'era gia l'elenco delle variabili readline, ma come e' gia stato detto:
Quote: |
page-completions (On)
If set to On, readline uses an internal more-like pager to display a screenful of possible completions at a time.
|
readline ha un pager interno per il completamento. Per quanto ho potuto vedere (ma come al solito non ho letto tutto, ma solo le cose piu' evidenti e qualche ricerca in google) non c'e' modo di cambiarlo.
Rileggendo ho notato che avevo dimenticato di dire che avevo gia letto a proposito di readline. Mi scuso per questo.
Se trovo un po' di tempo e un po' di voglia, faccio una modifica ai sorgenti di readline e li abilito a leggere la variabile di ambiente PAGER e intanto che ci sono verifico che una opzione simile non sia gia attiva (alias: un pager definito dall'utente)
Se ci fosse less come pager per readline sarebbe meglio, potendo fare ricerche e sfogliare l'elenco in ambo le direzioni
Eventualmente posto una patch... in fondo sara' solo qualche piccola riga di codice da patchare.
grazie
ciauz
Grazie comunque _________________ Libera scienza in libero stato.
Horizon of Events |
|
Back to top |
|
|
lucapost Veteran
Joined: 24 Nov 2005 Posts: 1419 Location: <ud|me|ts> - Italy
|
Posted: Sat Jun 21, 2008 8:07 pm Post subject: |
|
|
Dentro di me si sta combattendo un'intensa battaglia su come personalizzare il ~/.bashrc, in particolare le due opzioni di turno sono:
Code: | bind '"\t":complete'
bind '"\t":menu-complete' |
La prima è l'impostazione di default di bash su gentoo, ed è molto comoda per "navigare" all'interno di percorsi dei quali non si conosce bene la struttura, ma si sa che il file che si stà cercando "è lì dentro da qualche parte".
La seconda, invece, quando si sa già di trovarsi nel path corretto è molto utile per completare velocemente il nome del file.
Sono comodissime featurs che bash mette a disposizione degli amanti della shell, ma quale utilizzare? Mi sa che poter utilizzare entrambe sia abbastanza poco pratico (tipo associare 2 shortcut diversi). Illuminatemi. _________________ LP |
|
Back to top |
|
|
|