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/ ;)
Reacties
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 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 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 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