View previous topic :: View next topic |
Author |
Message |
ckx3009 Guru
Joined: 08 Apr 2008 Posts: 362 Location: Milano, Italy
|
Posted: Fri Dec 12, 2008 5:39 pm Post subject: aiuto per scriptino [risolto] |
|
|
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 |
|
|
Onip Advocate
Joined: 02 Sep 2004 Posts: 2912 Location: Parma (Italy)
|
Posted: Fri Dec 12, 2008 5:47 pm Post subject: |
|
|
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 |
|
|
djinnZ Advocate
Joined: 02 Nov 2006 Posts: 4831 Location: somewhere in L.O.S.
|
Posted: Fri Dec 12, 2008 5:55 pm Post subject: |
|
|
Code: | ker=$((eselect --no-color kernel show)) | compito a casa: leggere il fottuto manuale (sequenze ansi ed eselect) una volta tanto... _________________ scita et risus abundant in ore stultorum sed etiam semper severi insani sunt
mala tempora currunt...mater stultorum semper pregna est
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist |
|
Back to top |
|
|
ckx3009 Guru
Joined: 08 Apr 2008 Posts: 362 Location: Milano, Italy
|
Posted: Fri Dec 12, 2008 8:22 pm Post subject: |
|
|
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 |
|
|
lucapost Veteran
Joined: 24 Nov 2005 Posts: 1419 Location: <ud|me|ts> - Italy
|
Posted: Fri Dec 12, 2008 8:34 pm Post subject: |
|
|
prova con questo:
Code: | eselect --no-color kernel show |grep usr |
_________________ LP |
|
Back to top |
|
|
djinnZ Advocate
Joined: 02 Nov 2006 Posts: 4831 Location: somewhere in L.O.S.
|
Posted: Sat Dec 13, 2008 1:01 pm Post subject: |
|
|
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 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. _________________ scita et risus abundant in ore stultorum sed etiam semper severi insani sunt
mala tempora currunt...mater stultorum semper pregna est
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist |
|
Back to top |
|
|
ckx3009 Guru
Joined: 08 Apr 2008 Posts: 362 Location: Milano, Italy
|
Posted: Sat Dec 13, 2008 11:09 pm Post subject: |
|
|
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 |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4810 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Sun Dec 14, 2008 8:07 am Post subject: |
|
|
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 |
|
|
djinnZ Advocate
Joined: 02 Nov 2006 Posts: 4831 Location: somewhere in L.O.S.
|
Posted: Sun Dec 14, 2008 2:43 pm Post subject: |
|
|
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...
[OT] Quote: | verba et risus abundat in orae stultorum sed etiam semper severi insani sunt | 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
mala tempora currunt...mater stultorum semper pregna est
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist |
|
Back to top |
|
|
ckx3009 Guru
Joined: 08 Apr 2008 Posts: 362 Location: Milano, Italy
|
Posted: Mon Dec 15, 2008 6:07 pm Post subject: |
|
|
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 |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4810 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Mon Dec 15, 2008 6:19 pm Post subject: |
|
|
ckx3009 wrote: |
avevo cercato qualcosa su sed
|
Conosci l'articolo di papà gentoo? _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
djinnZ Advocate
Joined: 02 Nov 2006 Posts: 4831 Location: somewhere in L.O.S.
|
Posted: Mon Dec 15, 2008 6:50 pm Post subject: |
|
|
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).
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
mala tempora currunt...mater stultorum semper pregna est
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist |
|
Back to top |
|
|
|