Posts Tagged ‘bash’

h1

Enqueue in audacious volume 2! anche i file in “system:/media/*”

febbraio 12, 2009

Grazie a TaTo sono riuscito a capire un bug ( chiamarlo bug è una parola grossa ) che affliggeva il primo metodo da me implementato in Kde, il “bug” consisteva :

Se mettevo in coda qualsiasi file che era nell mio hd con un path così:

/home/asd/musica/canzone.mp3

Allora audacious lo encodava ma questo non andava a buon fine se il file era encodato da una partizione montata come un hardisk esterno, una pendrive o qualsiasi altra cosa. dato che kde monta automaticamente tramite HAL il dispositivo, lo associa a un path del genere system:/media/<periferica/ quindi se noi encodavamo un file da quella cartella con quel path, audacious non lo riconosceva e lo “snobbava” infatti se andavamo a dare un mount vedevamo il mount-point d’origine e se accedevamo a quella cartella nonchè il mount-point da li riuscivamo a encodare, quindi era solo un problema di path.

Per ovviare a questa “falla” (stò usando termini catastrofici) ho creato questo scriptino:

#!/bin/bash
stringa=$1
echo $stringa > confr.txt
string="system:/"
confronto=`sed -n 's/media\/*.*//p' confr.txt`
#kdialog --msgbox $stringa
if [ $string == $confronto ];
then
#kdialog --msgbox ok!
echo $stringa > .1.txt #arriva la stringa con system
#kdialog --msgbox $stringa
sed -n 's/system:\/media\/*\///p' .1.txt > .2.txt #tolgo system:/media
file=`cat .2.txt`
#kdialog --msgbox $file #debug
brano=`sed -n 's/system:\/media\/[a-z A-Z 0-9]*//p' .1.txt` #nome canzone
#kdialog --msgbox $brano #debug
disp=`sed -n 's/\/[A-Za-z0-9]*.*//p' .2.txt` #variabile dispositivo
#kdialog --msgbox $disp #debug
mount |grep $disp > .4.txt
media=`cat .4.txt |awk '{ print $3 }'`
#kdialog --msgbox $media #debug
echo $media $brano > .5.txt
path=`sed -n 's/ /\//p' .5.txt`
#kdialog --msgbox $path #debug
audacious -e "$path" #ecco il mio path per audacious
rm .1.txt .2.txt .3.txt .4.txt .5.txt confr.txt
else
audacious -e "$stringa"
fi
#Version 0.2

SCARICATELO DA QUI–> audcoda <–
Copiatelo in /usr/bin/

In questo script non faccio altro che con qualche sed di prendermi tutti i path che mi servono e fixare il tutto e crearmi il path originale da andare a dare ad audacious.
Avevo pensato di farlo subito con un locate, ma alcune distribuzione non l’hanno come gentoo e bisognava scaricarlo,ma  pensandoci bene “SI PUÒ FARE!” viene più veloce e non devo aggiornare il db periodicamente se non sempre quando monto una pendrive e sono sicuro che funziona senza nessuno sbattimento.
Tornando a noi, adesso ci andiamo a creare nella solita cartella

~/.kde3.5/share/apps/konqueror/servicemenus

Vi create  o modificate se lo avete già creato il nostro file coda.desktop

[Desktop Entry]
Icon=cd
ServiceTypes=audio/x-mp3,audio/x-mod,audio/x-oggflac,audio/x-scpls,audio/x-vorbis,audio/x-waw
all/all
Actions=addAud
X-KDE-Priority=TopLevel
X-KDE-Submenu=&Aggiungi a Audacious
[Desktop Action addAud]
Name=Aggiungi in coda
Icon=audacious
Exec=audcoda %U

Come avete notato in grassetto c’è “per chi già l’avevo fatto” la stringhetta da cambiare.
E’ tutto se avete qualche consiglio su come migliorare lo script o su come implementarlo con altri programmi ecc fatemi sapere, per tutti le problematiche sono a vostra disposizione.

subrikk

Annunci
h1

Compilare in C in Linux “per pigri”

novembre 11, 2008

Oggi all’uni mi sono trovato a dover compilare 10 programmi e ricompialri 10 volte ogni uno per errori bene,lo stress era tutto nel dover fare ogni volta gcc file -0 fileout  ./fileout , ogni santa volta allora come al solito mi viene in aiuto bash con uno script al quanto semplice:

#/bin/bash
if [ “$#” == “0” ];
then
echo “devi inserire un elemento”
exit 1
fi

gcc $1 -o $1.out

if [ -f $1.out ]
then
./$1.out
else
echo”ci sn stati errori”
fi

Salvatelo in un file di testo, dategli i relativi permessi “chmod 775 file” copiatelo in /usr/bin/ filerà liscio come l’olio

Ovviamente è soltanto per un programma alla volta quindi non è che serva molto a quelle persone che devono compilare più programmi alla volta ma è utile per persone che devono compilare programmi diversi molte volte, lo aggiornerò man mano.

Per chiarimenti nn esiste a contattarmi

h1

Script per collegamento wireless

ottobre 1, 2007

Se ci colleghiamo abitualmente a più access points con il nostro laptop, potrebbe essere noioso dover riconfigurare ogni volta la nostra interfaccia wireless. Questo semplicissimo script non fa altro che chiederci due parametri: un’interfaccia e un access point. Il terzo parametro, cioè l’eventuale password, è opzionale. Commentate la vostra interfaccia wireless nel file /etc/network/interfaces. Ecco lo script:

#!/bin/bash

if [ $UID != 0 ]

then

        echo “Need to be root”

exit

fi

if [ $# -lt 2 ]

then

        echo “Usage: $0 interface essid”

exit;

fi

if [ $# == 2 ]

then

        iwconfig $1 essid $2

elif [ $# == 3 ]

then

        iwconfig $1 essid $2 key $3

fi

dhclient $1

Dopo aver salvato e reso eseguibile il nostro script, basterà richiamarlo da root con la seguente sintassi:

$ sudo nomedelloscript interfaccia essid


Per esempio.:

Mettiamo caso che il nostro script si chiami wanconfig. Per collegare l’interfaccia wlan0 ad un access point di nome MIOAP faremo così:

$ sudo wanconfig wlan0 MIOAP

Se dovesse essere presente una password possiamo passarla direttamente in esadecimale come terzo parametro:

$ sudo wanconfig wlan0 MIOAP B68E1D5382F76B57B2B83362CF

o se preferiamo in ascii anteponendo “s:” alla password:

$ sudo wanconfig wlan0 MIOAP s:pippo

Adesso potremo passare velocemente da un AP ad un altro 😉

 

h1

Script per backup remoto

settembre 28, 2007

Quando si ha la necessità di passare diversi files da un pc ad un altro con una certa frequenza (magari tra due pc di casa o da casa all’ufficio), può essere utile avere uno script che faccia tutto questo in modo rapido e senza dovere inserire ogni volta la password del computer remoto. Questo script accetta uno o più files o cartelle come parametro ma non accetta nomi che contengono spazi bianchi. Bisogna soltanto modificare le variabili definite all’inizio e installare il pacchetto expect sull’host locale.

 

$ sudo apt-get install expect

 

Inoltre bisogna anche avere il pacchetto openssh-server installato sull’host remoto dato che questo script fa uso di scp e, ovviamente, un utente valido.

Ecco il codice:

 

#!/bin/bash

 

############################################################

remote_user=”corrob” # utente sull’host remoto

remote_host=”192.168.0.4″ # host remoto

remote_path=”~/Desktop” # percorso sull’host remoto

pwd=”tua_password” # password dell’utente sull’host remoto

############################################################

 

if [ $# -lt 1 ]

then

    echo “Usage: $0 richiede almeno un file come argomento”

    exit

fi

for i in $*

do

    if [ -d $i ]

    then

        par=-r

    elif [ -f $i ]

    then

        par=””

    else

        echo “$i: No such file or directory”

        continue

    fi

expect -c “spawn /usr/bin/scp $par $i $remote_user@$remote_host:$remote_path” -c ‘expect *password*’ -c “send — $pwd\r” -c ‘expect “*100%*\r”‘ -c expect -c ‘wait’ 2> /dev/null

done

 

Una volta copiato il contenuto incollatelo in un file in /usr/src e date a tutti i permessi di lettura ed esecuzione.

$ sudo chmod 555 /usr/bin/nomescript

 

Io l’ho chiamato mybackup. Adesso configurate le 4 variabili all’inizio dello script in modo da contattare il vostro host remoto per il backup.

Infine utilizzate lo script in questo modo:

 

$ mybackup file1 file2 file3

Nota: è necessario avere effettuato l’accesso in ssh all’host remoto almeno una volta altrimenti vi verrà chiesto di autenticare l’host e lo script non funzionerà. Assicuratevi perciò di avere la chiave nel file ~/.ssh/know_hosts.