Pagina 3 di 4

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 20:12
da ulisse89
in realtà ce ne sono altre
s390 e arm sono due "ufficiali" per esempio

Potrei basarmi su una lista di tutte quelle possibili. Dove potrei reperirle?

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 20:16
da conraid
ulisse89 ha scritto:
in realtà ce ne sono altre
s390 e arm sono due "ufficiali" per esempio

Potrei basarmi su una lista di tutte quelle possibili. Dove potrei reperirle?


boh

naturalmente se ti basi sui porting ufficiali di slackware allora sono quelle menzionate prima, più s390 e arm
se poi vuoi che il tuo script funzioni anche in distribuzioni non ufficiali, che ne so tipo slamd64, allora devi vedere ogni distribuzione cosa utilizza

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 20:17
da d4z_c0nf
conraid ha scritto:in realtà ce ne sono altre
s390 e arm sono due "ufficiali" per esempio


Sì ma siccome sono specifiche per l'architettura, potresti metterle in una variabile.
Nel senso se tu usi una i*86 di sicuro non avrai pacchetti del tipo x86_64 o arm, puoi però avere noarch.
Poi se magari cambi architettura e vuoi portarti con te lo script cambi solo la variabile.
Una variabile del tipo ARCH="i.86|noarch", ad esempio.
Volendo potresti avere una versione che abbia un numero di release maggiore di 9, allora a quel punto aumentando le cifre
[0-9] diventa [0-9]+.

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 20:26
da ulisse89
Sì, potrei fare una variabile che rappresenta l'architettura.
Per la questione del numero di release che può essere maggiore di 9 ho notato che :

Codice: Seleziona tutto

echo "ciao-2-i686-13" | egrep "\-(i.86|noarch|x86_64)-[0-9].*$"

matcha, anche se non dovrebbe.
Infatti la parte "-[0-9].*$" vuol dire che cerca dopo il trattino finale, una sola cifra da 0 a 9 e un set di caratteri di qualsiasi dimensione fino alla fine.

EDIT: Ho capito: al posto del punto che matcha tutti i caratteri comprese le cifre dovrei mettere un [a-z]. Verrebbe:

Codice: Seleziona tutto

echo "ciao-2-i686-13" | egrep "\-(i.86|noarch|x86_64)-[0-9]+[a-z]*$"

Giusto?

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 20:32
da d4z_c0nf
ulisse89 ha scritto:Sì, potrei fare una variabile che rappresenta l'architettura.
Per la questione del numero di release che può essere maggiore di 9 ho notato che :

Codice: Seleziona tutto

echo "ciao-2-i686-13" | egrep "\-(i.86|noarch|x86_64)-[0-9].*$"

matcha, anche se non dovrebbe.
Infatti la parte "-[0-9].*$" vuol dire che cerca dopo il trattino finale, una sola cifra da 0 a 9 e un set di caratteri di qualsiasi dimensione fino alla fine.

EDIT: Ho capito: al posto del punto che matcha tutti i caratteri comprese le cifre dovrei mettere un [a-z]. Verrebbe:

Codice: Seleziona tutto

echo "ciao-2-i686-13" | egrep "\-(i.86|noarch|x86_64)-[0-9]+[a-z]*$"

Giusto?


Giusto. Ma se ci pensi anche inutile, perchè in quel caso che ci sia +[a-z]* o solo .*, visto quello che ti serve, è uguale.
Io prima intendevo, sbagliando perchè funzionava comunque, una maggiore "coerenza" della reg-ex.

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 20:37
da ulisse89
@d4z_c0nf :
Se metto ".*" allora matcha anche se viene passato il nome corto "qwerty-noarch-sl". Lo so che è surreale che un programma abbia "noarch" come parte del nome, ma è teoricamente possibile.
In questo caso il nome del pacchetto è passato in forma breve (cioè solo il nome del programma), mentre viene riconosciuto come nome completo.
Sempre sotto questo punto di vista anche "\-(i.86|noarch|x86_64)-[0-9]+[a-z]*$" non va bene. Supponendo che un pacchetto si chiami "ntfs-noarch-3g", passa come nome completo.

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 20:46
da d4z_c0nf
ulisse89 ha scritto:@d4z_c0nf :
Se metto ".*" allora matcha anche se viene passato il nome corto "qwerty-noarch-sl". Lo so che è surreale che un programma abbia "noarch" come parte del nome, ma è teoricamente possibile.
In questo caso il nome del pacchetto è passato in forma breve (cioè solo il nome del programma), mentre viene riconosciuto come nome completo.


No aspè intendevo, da qui:
"-[0-9]+[a-z]*$"
se metti .* al posto di +[a-z]*
Non matcha quella stringa che hai detto.
Al massimo può matchare qualcosa del tipo qwerty-noarch-1sl, nel caso esistesse.

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 20:50
da ulisse89
Sì diciamo che ho risolto. Nel caso in cui qualche programmatore sviluppi il software "ntfs-noarch-3g", lo vado a prendere a casa. :evil:
Comunque la soluzione trovata va più che bene, grazie a tutti.
Se qualcuno avesse un lampo di genio per qualcosa di più universale e preciso, si faccia avanti.

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 20:55
da targzeta
Visti gli esempi che riportate, la soluzione proposta nel thread che hai scovato secondo me potrebbe funzionare, con qualche modifica. O ancora non ho capito cosa chiedi?

Emanuele

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 22:34
da albatrosla
Ulisse89, la mia soluzione non ti piace? Isola il solo nome, qualsiasi sia la sua "lunghezza" o il suo "frazionamento", e non fa troppo lo schizzinoso con le arch e le revisioni. Guardandola la correggo in:

Codice: Seleziona tutto

echo nome_package | sed "s/\(-[^-]\{1,\}\)\{3\}$//"

Più corretta. In pratica cancella dalla stringa gli ultimi tre campi separati da "-" e costituiti da caratteri che non siano "-". Funziona qualsiasi sia il nome del package. Provare per credere:

Codice: Seleziona tutto

echo ntfs-3g-extreme-score-number-into-program-name-2009.4.4-i486-1|sed "s/\(-[^-]\{1,\}\)\{3\}$//"

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 22:39
da conraid
@spina
@albatrosla

secondo me lui non cerca quello, nel senso che non cerca di trovare il nome dato il pacchetto

mi spiego
lui non ha
ntfs-3g-extreme-score-number-into-program-name-2009.4.4-i486-1
da cui ricavare
ntfs-3g-extreme-score

lui ha per esempio
ntfs-3g-extreme-score
e vuole sapere se è completo o no
come fareste con questo metodo?

se poi ho capito male io, i'm sorry

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 23:03
da targzeta
Ecco, albatrosla ha fatto quello che intendevo io. Secondo me è il miglior modo per ottenere quello che si vuole. Ovviamente se sed non modifica la stringa in input allora il nome non è completo :).

Questo ad esempio dovrebbe andar bene:

Codice: Seleziona tutto

[ $PACKAGE = $(echo $PACKAGE | sed "s/\(-[^-]\{1,\}\)\{3\}$//") ] && echo  NOMECORTO || echo NOMECOMPLETO


Nota che in questo modo, se PACKAGE si riferisce ad un pacchetto, l'output di sed è proprio il nome del pacchetto, due piccioni con una fava,
Emanuele

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: ven feb 19, 2010 23:54
da d4z_c0nf
spina ha scritto:Ecco, albatrosla ha fatto quello che intendevo io. Secondo me è il miglior modo per ottenere quello che si vuole. Ovviamente se sed non modifica la stringa in input allora il nome non è completo :).

Questo ad esempio dovrebbe andar bene:

Codice: Seleziona tutto

[ $PACKAGE = $(echo $PACKAGE | sed "s/\(-[^-]\{1,\}\)\{3\}$//") ] && echo  NOMECORTO || echo NOMECOMPLETO


Nota che in questo modo, se PACKAGE si riferisce ad un pacchetto, l'output di sed è proprio il nome del pacchetto, due piccioni con una fava,
Emanuele


L'unica cosa che voglio dire è.. ma perchè non usare le extended (opzione "-r" di sed) così da eliminare tutti quegli escape che rendono faticosa l'intepretazione umana dell'espressione? :D

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: sab feb 20, 2010 8:38
da ulisse89
@ spina a albatrosla: la vostra soluzione mi era sfuggita, scusate.
Però l'ho provata e non funziona. Premettendo che quello che mi serve è quello che ha detto conraid, faccio qualche esempio, prendendo come riferimento la:

Codice: Seleziona tutto

[ $PACKAGE = $(echo $PACKAGE | sed "s/\(-[^-]\{1,\}\)\{3\}$//") ] && echo  NOMECORTO || echo NOMECOMPLETO

Con PACKAGE="ntfs-3g-extreme-score-number-into-program-name-2009.4.4-i486-1" --> NOMECOMPLETO (e va bene)
Con PACKAGE="ntfs-3g-extreme-score-number-into-program-name" --> NOMECOMPLETO (e non va bene).

In pratica la vostra soluzione tratta come nome completo ogni nome di pacchetto che ha più di tre "-". Ma un nome di un software può avere anche più di 3 "-".

Per ricavare il nome di un programma dal nome completo del pacchetto, la vostra soluzione è perfetta, infatti me tengo da parte perchè sicuramente mi servirà.

Re: [BASH] Riconoscere nome completo da nome corto

Inviato: sab feb 20, 2010 11:36
da targzeta
Anche tu non hai tutti i torti. Allora devi raffinare lo script inserendoci altre caratteristiche tipiche di un pacchetto slackware. Ecco un esempio:

Codice: Seleziona tutto

#!/bin/bash
# by Spina
#
# $1 = Nome da controllare

_ARCH='..\?86 noarch'

for arch in $_ARCH
do
    PGRNAME=$(echo $1 | sed "s/-[^-]*-${arch}[^-]*-[0-9][^-]*$//")
    if [ $PGRNAME != $1 ]
    then
        echo "Nome completo per $PGRNAME"
        exit
    fi
done

echo "Nome corto"


Emanuele

P.S. Nota che c'è un 'exit', quindi invoca lo script con 'sh nomescript' se non vuoi che l'exit uccida la shell corrente :)