Pagina 1 di 1

[Risolto][bash][apt-get] globbing | regex

Inviato: venerdì 29 maggio 2015, 21:22
da rai
Mi sono accorto in questo output di due cose che non mi spiego

Codice: Seleziona tutto

sudo apt-get -s purge "linux-headers-3.2.0-7*"
[...]
Nota, viene selezionato "linux-headers-3.2.0-70-generic" per l'espressione regolare "linux-headers-3.2.0-7*"
Nota, viene selezionato "linux-headers-3.2.0-65-generic" per l'espressione regolare "linux-headers-3.2.0-7*"
[...]
I seguenti pacchetti saranno RIMOSSI:
  linux-generic-pae* linux-headers-3.2.0-77* linux-headers-3.2.0-77-generic-pae* linux-headers-3.2.0-79* linux-headers-3.2.0-79-generic-pae*
  linux-headers-3.2.0-80* linux-headers-3.2.0-80-generic-pae* linux-headers-3.2.0-82* linux-headers-3.2.0-82-generic-pae*
  linux-headers-3.2.0-83* linux-headers-3.2.0-83-generic-pae* linux-headers-3.2.0-84* linux-headers-3.2.0-84-generic-pae*
  linux-headers-generic-pae*
"linux-headers-3.2.0-7*" ( che per bash non è un'espressione regolare ma globbing) è trattata da apt-get come regex per identificare i pacchetti.
Ma questo senza che io lo trovi documentato nel man. Mi sembra un comportamento pericoloso al limite del bug: in questo caso io avrei eliminato tranquillamente anche il kernel corrente mentre mi aspettavo di eliminare solo i kernel .*77.* e .*79.*
Si consideri che il preavviso Nota, viene selezionato "bla bla bla" per l'espressione regolare "bla bla bla*" diventa inutile quando, come in questo caso, l'output è talmente lungo da eccedere lo scrollback default del terminale

seconda cosa che non mi è chiara: come mai la stringa viene interpretata come regex benché sia tra apici?
Grazie fin da ora per correzioni e chiarimenti.

Re: [bash][apt-get] globbing | regex

Inviato: venerdì 29 maggio 2015, 23:08
da cortinico
Ciao,

In realtà è presente dentro la pagina di manuale
Se nessun pacchetto corrisponde all'espressione specificata e questa contiene uno tra «.», «?» o «*», allora viene considerata come un'espressione regolare POSIX e viene confrontata con tutti i nomi di pacchetto nel database. Ogni corrispondenza viene quindi installata (o rimossa). Notare che la corrispondenza avviene con sottostringhe, perciò «bass.*» trova corrispondenza con «quanto-bass» e «bassissimo». Se ciò non è quello che si desidera, ancorare l'espressione regolare con un carattere «^» o «$», oppure creare un'espressione regolare più specifica.
Per rispondere alla tua domanda:
"linux-headers-3.2.0-7*" ( che per bash non è un'espressione regolare ma globbing)
Purtroppo non è così, anzi. Mettendo le virgolette te impedisci a bash di effettuare il globbing. Prova a fare qualche prova con ls nella tua home per convincerti. Così facendo la stringa viene passata direttamente ad apt-get che la interpreta come espressione regolare e ti da i risultati del caso.

Il "problema" che fai presente tu comunque è già stato segnalato da altri: http://askubuntu.com/questions/210976/a ... pected-why
Questa pagina dovrebbe chiartiti tutti i dubbi :birra:

Re: [bash][apt-get] globbing | regex

Inviato: sabato 30 maggio 2015, 1:11
da crap0101
cortinico [url=http://forum.ubuntu-it.org/viewtopic.php?p=4763559#p4763559][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: Per rispondere alla tua domanda:
"linux-headers-3.2.0-7*" ( che per bash non è un'espressione regolare ma globbing)
Purtroppo non è così, anzi. Mettendo le virgolette te impedisci a bash di effettuare il globbing.
Che tra l'altro è un'ottima idea.

Re: [bash][apt-get] globbing | regex

Inviato: sabato 30 maggio 2015, 8:56
da rai
Grazie per le risposte risolutive
In realtà è presente dentro la pagina di manuale
Il motivo di questa figuraccia è che ho fatto più ricerche dentro il manuale con /expression o con /regular ma non trovavo niente perchè ero col cursore oltre l'ultima occorrenza della espressione cercata :muro:
Ma questa è un' altra questione, eventualmente aprirò un'altra discussione
:ciao:

Re: [Risolto][bash][apt-get] globbing | regex

Inviato: sabato 30 maggio 2015, 11:02
da crap0101
un colpo di 'N' per essere sicuri :-)

Re: [Risolto][bash][apt-get] globbing | regex

Inviato: sabato 30 maggio 2015, 13:24
da rai
Sì è vero, bisognerebbe ricordarselo. Ma non è autoevidente (e nemmeno tanto logico) che nei manuali la ricerca venga fatta in modo asimmetrico:
:·: in avanti fino alla fine del manuale
:·: indietro solo nella parte visualizzata in quel momento

può esserci un motivo per non implementare una ricerca ogni volta nell'intero testo del man? per capirci quello che fanno gedit o leafpad o firefox

Re: [Risolto][bash][apt-get] globbing | regex

Inviato: sabato 30 maggio 2015, 16:55
da UbuNuovo
le opzioni di ricerca non mancano:

Codice: Seleziona tutto

                         SEARCHING

  /pattern          *  Search forward for (N-th) matching line.
  ?pattern          *  Search backward for (N-th) matching line.
  n                 *  Repeat previous search (for N-th occurrence).
  N                 *  Repeat previous search in reverse direction.
  ESC-n             *  Repeat previous search, spanning files.
  ESC-N             *  Repeat previous search, reverse dir. & spanning files.
  ESC-u                Undo (toggle) search highlighting.
  &pattern          *  Display only matching lines
        ---------------------------------------------------
        A search pattern may be preceded by one or more of:
        ^N or !  Search for NON-matching lines.
        ^E or *  Search multiple files (pass thru END OF FILE).
        ^F or @  Start search at FIRST file (for /) or last file (for ?).
        ^K       Highlight matches, but don't move (KEEP position).
        ^R       Don't use REGULAR EXPRESSIONS.
 ---------------------------------------------------------------------------