Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
aiuto per scriptino [risolto]
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) Forum di discussione italiano
View previous topic :: View next topic  
Author Message
ckx3009
Guru
Guru


Joined: 08 Apr 2008
Posts: 362
Location: Milano, Italy

PostPosted: Fri Dec 12, 2008 5:39 pm    Post subject: aiuto per scriptino [risolto] Reply with quote

spesso mi capita di dover ricompilare un kernel "alternativo" da usare con vmware, e devo fare un macello osceno per spostare, rinominare, modificare, [...], dei files. cosi' mi sono fatto una specie di script che non e' altro che una lunga serie di comandi uno in fila all'altro per "automatizzare" le operazioni.

il problema e':
dopo aver lanciato "eselect kernel show", vorrei che, in base al suo output (/usr/src/linux-2.6.26-gentoo-r3), un file venisse rinominato con la parte finale, privata di "/usr/src/linux-".
sono (piu' o meno) riuscito a ricavarmi l'output in questo modo:
Code:
ker=$(eselect kernel show);
mv /boot/vm "/boot/vmlinuz-${ker#*/usr/src/linux-}";

pero' il risultato non e' esattamente quello che mi aspetto, dato che il nome del file sembra avere qualcosa che non va.
ls -lah lo riporta cosi':
Code:
vmlinuz-2.6.26-gentoo-r3?[00m ?                            ?[00m?[00m


dove sbaglio?
c'e' (c'e' sicuramente) un metodo migliore di quello che ho pensato per fare quel che mi serve?

grazie in anticipo


Last edited by ckx3009 on Mon Dec 15, 2008 6:07 pm; edited 1 time in total
Back to top
View user's profile Send private message
Onip
Advocate
Advocate


Joined: 02 Sep 2004
Posts: 2912
Location: Parma (Italy)

PostPosted: Fri Dec 12, 2008 5:47 pm    Post subject: Reply with quote

vedi se eselect può dare output senza colore. Quei caratteri strani dovrebbero essere i codici di colore per il terminale.
_________________
Linux Registered User n. 373835

Titus Lucretius Carus, De Rerum Natura - Tantum religio potuit suadere malorum
Back to top
View user's profile Send private message
djinnZ
Advocate
Advocate


Joined: 02 Nov 2006
Posts: 4831
Location: somewhere in L.O.S.

PostPosted: Fri Dec 12, 2008 5:55 pm    Post subject: Reply with quote

Code:
ker=$((eselect --no-color kernel show))
compito a casa: leggere il fottuto manuale (sequenze ansi ed eselect) una volta tanto... :twisted:
_________________
scita et risus abundant in ore stultorum sed etiam semper severi insani sunt:wink:
mala tempora currunt...mater stultorum semper pregna est :evil:
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist :wink:
Back to top
View user's profile Send private message
ckx3009
Guru
Guru


Joined: 08 Apr 2008
Posts: 362
Location: Milano, Italy

PostPosted: Fri Dec 12, 2008 8:22 pm    Post subject: Reply with quote

colore? ma io non vedo l'output colorato....cioe' ha il normale colore del testo in console...cmq a sto punto immagino sia l'indicazione del "colore di base"
tuttavia...
Code:
ker=$((eselect --no-color kernel show));
bash: eselect --no-color kernel show: syntax error in expression (error token is "no-color kernel show")

invece scritto cosi' "ker=$(eselect --no-color kernel show);" non da errori, ma alla fine del nome del file da un "?"


per i manuali...non sono proprio uno che non li legge, lo dimostra il fatto che parte del comando deriva proprio dalla guda a bash di Robbins.
pero' se non capisco o non trovo qualcosa, chiedo.
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: Fri Dec 12, 2008 8:34 pm    Post subject: Reply with quote

prova con questo:
Code:
 eselect --no-color kernel show |grep usr

_________________
LP
Back to top
View user's profile Send private message
djinnZ
Advocate
Advocate


Joined: 02 Nov 2006
Posts: 4831
Location: somewhere in L.O.S.

PostPosted: Sat Dec 13, 2008 1:01 pm    Post subject: Reply with quote

L'invito a rileggere il manuale (non guide, non howto, non articoli, il man e l'info o la documentazione ufficiale in /usr/doc) vale per tutti e lo ripeto.
$(( , imparate cosa è e come si usa (la bastadata la ho fatta apposta :twisted:
Code:
ker=`eselect --no-color kernel show`
); è ovvio che ? (faccio notare che ^? e ^H sono i due noti caratteri per escape/backspace che tanto rompono chi ha a che fare con la legacy di termcap ed in generale ? nei messaggi di errore della shell sta per un qualsiasi carattere non visualizzabile) seguito dal dannato [00m è una tipica sequenza di escape ansi; il ";" alla fine di una istruzione si usa in pascal non in bourne shell;"'" e "$''" quescti sconosciuti ... e poi mi scoccio a spiegare tutto, ultimamente mi pare che aiuto solo senza ricevere nulla in cambio.
Il primo magico comando per capire cosa diavolo succede è
Code:
eselect --no-color kernel show | hexdump -C
e, per inciso
Code:
exec ${ker/*linux-/'mv /boot/vm /boot/vmlinuz-'}
è più semplice.
Inutile dire che una forma più "canonica" per ottenere il nome della versione del kernel è
Code:
ker=${ker#*linux-}
ker=${ker%%$' \n'*}
.

Che eselect e diversi elementi simili siano una dannazione (l'output è gestito in modo a dir poco balordo) è altra considerazione, ma le buone tradizioni di unix tendono ad essere dimenticate, basta guardare le dipendenze sia di portage che di paludis.

@ckx3009: se leggi il fottuto manuale o la fottuta documentazione ufficiale (e gli esempi) ci capisci qualcosa, se ti affidi alle guide ed agli howto con ogni probabilità riesci solo a diventare scemo e non concludi nulla, lo dico per esperienza. Quindi leggi quello che ti ho indicato e la guida per bash scripting avanzato su tldp in inglese, ti servirà sempre.

@all per punizione leggere il manuale e fare una bella guida mettere nella sezione documentazione per capire come funziona la sostituzione nella shell (così mi evitate di andarmi a cercare la guida ufficiale in inglese ogni volta che mi scordo come si fa).

Il mio tono potrebbe sembrare acido... e lo è, siamo pur sempre sotto il dannatissimo stramaledetto natale, con le luminarie, gli imbecilli in giro a fare regali ed intasare il traffico etc. :evil:
_________________
scita et risus abundant in ore stultorum sed etiam semper severi insani sunt:wink:
mala tempora currunt...mater stultorum semper pregna est :evil:
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist :wink:
Back to top
View user's profile Send private message
ckx3009
Guru
Guru


Joined: 08 Apr 2008
Posts: 362
Location: Milano, Italy

PostPosted: Sat Dec 13, 2008 11:09 pm    Post subject: Reply with quote

sono d'accordissimo che siamo sotto il fottuto natale e i toni per alcuni si fanno piu' acidi, tuttavia, dato che di bash non so assolutamente nulla, non mi pare molto indicato partire con "guida per bash scripting avanzato su tldp in inglese". oltretutto quello che ho letto e' esattamente la fottuta documentazione sul sito di Gentoo: bash per esempi.

provero' a tradurmi i comandi che hai scritto, sperando che non ci siano dentro altre bastardate che non fanno altro che rendere inutili i miei sforzi (dato che normalmente uno si aspetta che non si mettano di proposito errori nei consigli che si danno).

Quote:
ultimamente mi pare che aiuto solo senza ricevere nulla in cambio.

a me pare di aver provato piu' di una volta ad aiutarti, per quel che posso fare io.
e tuttavia le tue risposte sono sempre state negative o assenti. quindi non dire che la gente non ci prova.
e poi dato che hai conoscenze di molto superiori a quelle che sono la media del forum, e' abbastanza ovvio che sia tu ad aiutare gli altri e non il contrario.

per il resto, mi pare che ci siano molti che provano a dare una mano, io tra questi. non sempre serve, ma almeno ci si prova.

in ogni caso, grazie per le risposte.
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4810
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Sun Dec 14, 2008 8:07 am    Post subject: Reply with quote

Code:

s939 ~ # eselect --no-color kernel show
Current kernel symlink:
  /usr/src/linux-2.6.25-gentoo-r8-s939
                           

la causa dell'errore è il formato dell'output, su tre righe.
a te basta selezionare solo la seconda:
Code:

s939 ~ # kernel=$(eselect --no-color kernel show|sed -n '2p')
s939 ~ # echo $kernel
/usr/src/linux-2.6.25-gentoo-r8-s939

il grep sarebbe equivalente, ma va usato con --color=never
_________________
vu vu vu
gentù
mi piaci tu
Back to top
View user's profile Send private message
djinnZ
Advocate
Advocate


Joined: 02 Nov 2006
Posts: 4831
Location: somewhere in L.O.S.

PostPosted: Sun Dec 14, 2008 2:43 pm    Post subject: Reply with quote

L'invito a rileggere il manuale e la bastardata era prevalentemente rivolto ad onip e lucapost ma anche a te, l'apice inverso trasla direttamente l'output in una variabile $() e $(()) lo valutano, considera che IFS per default è impostata a $' \t\n' ('\qualcosa' è letterale, se vuoi che gli escape siano convertiti devi premettere il $) e dovresti capire dove sta l'inghippo.
Considerando sempre che prima di applicare un suggerimento è buona norma verificare sempre, un errore di distrazione, anche grossolano capita molto facilmente.

E ti ripeto che bash per esempi è utile per incuriosirsi ed iniziare a fare qualche tentativo ma se vuoi evitare di diventare scemo dietro a fraintendimenti e casi strani (e l'output malefico di eselect lo è) devi leggere la documentazione di bash, perchè solo in quelle pagine astruse, dopo le bestemmie di rito perchè qualcosa che non è ovvio non è scritto (come il limite nella nidificazione dei blocchi), troverai le informazioni che ti occorrono.
La via facile è la più lunga e dispendiosa. Lo so perchè ci sono cascato anche io a suo tempo grazie a guide del piffero.

Ristramaledetto natale (grazie alle lucine ho perso il contenuto di un intero HD, mi sa). Ma il "gufo" pagherà a caro prezzo... :evil:

[OT]
Quote:
verba et risus abundat in orae stultorum sed etiam semper severi insani sunt :wink:
esattamente cosa non ti è chiaro?! Ai casi da RTFM o UTFG propriamente detti non mi degno di rispondere (altra cosa da mettere nelle linee guida del forum)[/OT]
_________________
scita et risus abundant in ore stultorum sed etiam semper severi insani sunt:wink:
mala tempora currunt...mater stultorum semper pregna est :evil:
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist :wink:
Back to top
View user's profile Send private message
ckx3009
Guru
Guru


Joined: 08 Apr 2008
Posts: 362
Location: Milano, Italy

PostPosted: Mon Dec 15, 2008 6:07 pm    Post subject: Reply with quote

cloc3 wrote:
Code:

s939 ~ # eselect --no-color kernel show
Current kernel symlink:
  /usr/src/linux-2.6.25-gentoo-r8-s939
                           

la causa dell'errore è il formato dell'output, su tre righe.
a te basta selezionare solo la seconda:
Code:

s939 ~ # kernel=$(eselect --no-color kernel show|sed -n '2p')
s939 ~ # echo $kernel
/usr/src/linux-2.6.25-gentoo-r8-s939

il grep sarebbe equivalente, ma va usato con --color=never

perfetto, grazie mille!
avevo cercato qualcosa su sed ma non avevo capito come usarlo in questo caso, ora mi sto facendo qualche idea.

@djinnZ
quello che non era chiaro era principalmente il funzionamento della seconda riga di
Code:
ker=${ker#*linux-}
ker=${ker%%$' \n'*}


cmq ora direi che il problema e' risolto.
grazie a tutti :)
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4810
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Mon Dec 15, 2008 6:19 pm    Post subject: Reply with quote

ckx3009 wrote:

avevo cercato qualcosa su sed

Conosci l'articolo di papà gentoo?
_________________
vu vu vu
gentù
mi piaci tu
Back to top
View user's profile Send private message
djinnZ
Advocate
Advocate


Joined: 02 Nov 2006
Posts: 4831
Location: somewhere in L.O.S.

PostPosted: Mon Dec 15, 2008 6:50 pm    Post subject: Reply with quote

ckx3009 wrote:
quello che non era chiaro era principalmente il funzionamento della seconda riga
Quote:
Il primo magico comando per capire cosa diavolo succede è
Code:
eselect --no-color kernel show | hexdump -C
inserire un printf "$ker" tra le due righe di codice per vedere cosa diavolo compina... non ti lamentare se praticamente rispondo a maleparole di fronte a simili affermazioni. Ti ripeto che il problema principale con bash, sed awk & C è leggere la fottutissima documentazione (che presume di tutto di più e non è chiara, oltre che datata, l'espressione "leggere il fottuto manuale" si presta contemporaneamente a tutte le interpretazioni possibili in questi casi).
cloc3 wrote:
Conosci l'articolo di papà gentoo?
come sopra. Va bene per capire cosa ci si può fare ma non come usarlo nella mia modesta opinione ed esperienza (va bene che se penso agli esempi dei manuali c++/java per classi ed oggetti è ovvio che il fondo non lo si tocca mai).
_________________
scita et risus abundant in ore stultorum sed etiam semper severi insani sunt:wink:
mala tempora currunt...mater stultorum semper pregna est :evil:
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist :wink:
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Forum di discussione italiano 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