Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Auto completamento dei comandi su BASH
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
akiross
Veteran
Veteran


Joined: 02 Mar 2003
Posts: 1170
Location: Mostly on google.

PostPosted: Mon Aug 30, 2004 10:03 pm    Post subject: Auto completamento dei comandi su BASH Reply with quote

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
View user's profile Send private message
FonderiaDigitale
Veteran
Veteran


Joined: 06 Nov 2003
Posts: 1710
Location: Rome, Italy

PostPosted: Mon Aug 30, 2004 10:13 pm    Post subject: Reply with quote

Code:
export PAGER=comandotuo

_________________
Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica :)
Back to top
View user's profile Send private message
akiross
Veteran
Veteran


Joined: 02 Mar 2003
Posts: 1170
Location: Mostly on google.

PostPosted: Mon Aug 30, 2004 10:31 pm    Post subject: Reply with quote

ahh grazie :D

ciauz!
_________________
Libera scienza in libero stato.
Horizon of Events
Back to top
View user's profile Send private message
akiross
Veteran
Veteran


Joined: 02 Mar 2003
Posts: 1170
Location: Mostly on google.

PostPosted: Mon Aug 30, 2004 10:41 pm    Post subject: Reply with quote

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
View user's profile Send private message
FonderiaDigitale
Veteran
Veteran


Joined: 06 Nov 2003
Posts: 1710
Location: Rome, Italy

PostPosted: Tue Aug 31, 2004 12:01 am    Post subject: Reply with quote

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
View user's profile Send private message
shev
Bodhisattva
Bodhisattva


Joined: 03 Feb 2003
Posts: 4084
Location: Italy

PostPosted: Tue Aug 31, 2004 7:33 am    Post subject: Reply with quote

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 8) ) 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
View user's profile Send private message
randomaze
Bodhisattva
Bodhisattva


Joined: 21 Oct 2003
Posts: 9985

PostPosted: Tue Aug 31, 2004 8:13 am    Post subject: Reply with quote

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
View user's profile Send private message
akiross
Veteran
Veteran


Joined: 02 Mar 2003
Posts: 1170
Location: Mostly on google.

PostPosted: Tue Aug 31, 2004 9:36 am    Post subject: Reply with quote

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 :D (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
View user's profile Send private message
akiross
Veteran
Veteran


Joined: 02 Mar 2003
Posts: 1170
Location: Mostly on google.

PostPosted: Tue Aug 31, 2004 10:28 am    Post subject: Reply with quote

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
View user's profile Send private message
FonderiaDigitale
Veteran
Veteran


Joined: 06 Nov 2003
Posts: 1710
Location: Rome, Italy

PostPosted: Tue Aug 31, 2004 10:30 am    Post subject: Reply with quote

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
View user's profile Send private message
MyZelF
Bodhisattva
Bodhisattva


Joined: 25 Feb 2003
Posts: 2010
Location: Venice, Italy

PostPosted: Tue Aug 31, 2004 10:46 am    Post subject: Reply with quote

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
View user's profile Send private message
FonderiaDigitale
Veteran
Veteran


Joined: 06 Nov 2003
Posts: 1710
Location: Rome, Italy

PostPosted: Tue Aug 31, 2004 10:57 am    Post subject: Reply with quote

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
View user's profile Send private message
akiross
Veteran
Veteran


Joined: 02 Mar 2003
Posts: 1170
Location: Mostly on google.

PostPosted: Tue Aug 31, 2004 11:04 am    Post subject: Reply with quote

Ti riferisci alla Programmable Completion?

comunque calma ragazzi :D 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
View user's profile Send private message
MyZelF
Bodhisattva
Bodhisattva


Joined: 25 Feb 2003
Posts: 2010
Location: Venice, Italy

PostPosted: Tue Aug 31, 2004 11:05 am    Post subject: Reply with quote

@fonderia: ok, ho capito cosa intedevi.

@akiross: tienici informati sugli esiti del taroccamento... :P
_________________
"Larry the Cow was a bit frustrated at the current state of Linux Distributions..."
Back to top
View user's profile Send private message
shev
Bodhisattva
Bodhisattva


Joined: 03 Feb 2003
Posts: 4084
Location: Italy

PostPosted: Tue Aug 31, 2004 12:01 pm    Post subject: Reply with quote

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 :oops:

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
View user's profile Send private message
akiross
Veteran
Veteran


Joined: 02 Mar 2003
Posts: 1170
Location: Mostly on google.

PostPosted: Tue Aug 31, 2004 1:01 pm    Post subject: Reply with quote

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
Code:

$complete -p

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' :D
_________________
Libera scienza in libero stato.
Horizon of Events
Back to top
View user's profile Send private message
FonderiaDigitale
Veteran
Veteran


Joined: 06 Nov 2003
Posts: 1710
Location: Rome, Italy

PostPosted: Tue Aug 31, 2004 6:37 pm    Post subject: Reply with quote

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 forma
Code:
set variabile xyz
per tutta la lista
Code:
man readline

_________________
Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica :)
Back to top
View user's profile Send private message
akiross
Veteran
Veteran


Joined: 02 Mar 2003
Posts: 1170
Location: Mostly on google.

PostPosted: Tue Aug 31, 2004 7:13 pm    Post subject: Reply with quote

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
View user's profile Send private message
lucapost
Veteran
Veteran


Joined: 24 Nov 2005
Posts: 1419
Location: <ud|me|ts> - Italy

PostPosted: Sat Jun 21, 2008 8:07 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum