18 juli 2006

PrtSc

Dat staat er toch op een bepaalde toets van mijn keyboard te lezen. Als ik een screenshot neem dan is dat meestal om aan iemand te tonen, dus heb ik ervoor gezorgd dat mijn screenshots direct online geplaats worden. Eigenlijk is het realtief eenvoudige code, slechts mijn tweede bashscript. De code is hieronder te vinden: [code lang="Bash"] #! /bin/bash #this tool will upload a screenshot to the web #if the first parameter is empty the default name will be #the timestamp, and the image will be saved in png-format #default dir where the screenshot will be stored local local_dir="/home/tys/screenies/" #ftpserver ftp_server="ftp.crsolutions.be/screenshots/source" #login for ftp ftp_login="tys" #password for ftp ftp_pass="****" #if timestamp is on a timestamp will be added in the filename timestamp="off" #checks if a command exists checkCommand() { which $1 >>/dev/null if (($?!=0)) ; then echo "Error: command $1 doesn't exists, try 'sudo apt-get install $1" exit 1 fi } #just checking if the required commands are present checkCommand which checkCommand scrot checkCommand lftp #set the filename depending on the config if [ "$1" ] ; then if [ "${timestamp}" = "on" ] ; then filename="$(date +%d%m%Y-%H%M%S-)$1" else filename="$1" fi else filename="$(date +%d%m%Y-%H%M%S).png" fi #taking the screenshot scrot ${local_dir}${filename} #uploading the screenshot (arf, I used eval) eval "lftp -e 'put ${local_dir}${filename} && exit' ${ftp_login}:${ftp_pass}@${ftp_server}" #say something nice echo "file ${local_dir}${filename} was put online" [/code] Als je dit superhandige script ook wil kan je het hier downloaden: http://tys.crsolutions.be/gallery/file/projects/printscr/printscr nadat de file gedownload is doe je het volgende: [code lang="Bash"] sudo mv /hier/is/het/script/gedownload/printscr /usr/bin sudo chmod +x /usr/bin/printscr sudo apt-get install scrot sudo apt-get install lftp sudo vim /usr/bin/printscr [/code] Nu het script geopend is in, kan je config wijzigen. Je kan het script nu gebruiken doormiddel van één van onderstaande commando's [code lang="Bash"] #de filename == timestamp (ddmmyyyy-hhmmss.png) printscr #of filename == parameter printscr filename.png [/code] Mijn screenshots zijn te bewonderen op: http://tys.crsolutions.be/gallery/screenshots/ ;)

Dit artikel gaat over: , . PrtSc werd geschreven door Tijs.
Er zijn al 4 reacties.

Reacties

DefV

DefV schreef:
18/07/06

Variabele names in Bash worden meestal uitgedrukt in hoofdletters

maw: local_dir wordt LOCAL_DIR, ftp_login wordt FTP_LOGIN etc :)

en waarom gebruikt ge eval? gewoon het command typen in je bash script zou het moeten uitvoeren toch? :)

Soit, amuseer u op u werk ;)

tys

tys schreef:
18/07/06

Ik zal het script straks eens aanpassen, en ik gebruik eval, omdat het script anders errors gaf op [code]lftp -e ?put ${local_dir}${filename} && exit? ${ftp_login}:${ftp_pass}@${ftp_server}[/code]

DefV

DefV schreef:
18/07/06

Je kan dat eigenlijk heel simpel oplossen:

als je in bash werkt met ', is het zoals PHP zo dat ${bla} variabelen niet worden geparsed. Als je die daarentegen escaped, maw lftp -e \'put ... && exit\' ..., gaat je bash script de ${bla} vervangen, en de \' filteren naar '. Exact wat je wil dus.

Als je escaped quotes echter vuil vind, zoals mij, kan je ook gewoon werken met ", maw: lftp -e "put ${... && exit" ...

DefV

DefV schreef:
18/07/06

PS: als je wilt dat je script ook wordt gelinked aan de PrtSc knop, is er een simpel (sed vuil) trukje:

mv /usr/bin/gnome-screenshot /usr/bin/gnome-screenshot-old
ln -s /usr/bin/printscr /usr/bin/gnome-screenshot

Reageer velden gemarkeerd met een sterretje zijn verplicht

*