Background switcher
Giorgos Keramidas
keramida at ceid.upatras.gr
Thu Mar 29 21:48:57 EEST 2007
On 2007-03-29 21:18, Θοδωρής Λύτρας <aspirin at myrealbox.com> wrote:
> Στις Πέμπτη 29 Μάρτιος 2007 20:25, ο/η Αθανάσιος Οικονόμου έγραψε:
> > > Μπορεί τώρα να μου πει κάποιος πως θα πω στο shell το παρακάτω (ακολουθεί
> > > ψευδοκώδικας):
> > > ΑΝ (ώρα>07:00 && ώρα<19:00)
> > > {
> > > dcop kdesktop KBackgroundIface setWallpaper 0 μέρα.jpg 1
> > > }
> > > ΑΛΛΙΩΣ
> > > {
> > > dcop kdesktop KBackgroundIface setWallpaper 0 νύχτα.jpg 1
> > > }
> >
> > Ελπίζω να βοηθήσει το παρακάτω ;-)
> >
> > #!/bin/bash
> >
> > $dt=`date +%H`
> >
> > if [ $dt -gt 7 -a $dt -lt 19 ]; then
> > echo morning;
> > else
> > echo night;
> > fi;
>
> Ευχαριστώ πολύ. Αυτό που έγραψες πετάει λάθος:
> ./wallpr: line 3: =21: command not found
> ./wallpr: line 5: [: too many arguments
Όλα αυτά είναι αποτέλεσμα του αρχικού $dt=... assignment.
Το shell αντικαθιστά το `date +%H` με 21 και βλέπει κάτι σαν:
=21
Φυσικά, δεν υπάρχει τέτοια εντολή και σου γράφει:
./wallpr: line 3: =21: command not found
Ύστερα πάει να εκτελέσει την εντολή:
[ $dt -gt 7 -a $dt -lt 19 ]
Και αντικαθιστά το $dt με το τίποτα, αφού δεν έχει οριστεί μεταβλητή dt
σωστά. Αυτό είναι ισοδύναμο με:
[ -gt 7 -a -lt 19 ]
και εδώ είναι που σου γράφει το επόμενο syntax error:
./wallpr: line 5: [: too many arguments
> κατάλαβα τη λογική όμως, και ετούτο εδώ δεν πετάει λάθος:
>
> #!/bin/bash
> if [ `date +%H` -gt 7 -a `date +%H` -lt 19 ]; then
> echo morning;
> else
> echo night;
> fi;
Δε χρειάζεται να τρέξεις δυο φορές την εντολή date :)
> Σας ευχαριστώ όλους! Το έφτιαξα ήδη αυτό με τα wallpaper, δουλεύει και
> είναι πολύ cool! (Δείχνει μια παραλία εδώ στη Σκόπελο, με τον ήλιο
> ψηλά τη μέρα και σκοτεινή το βράδυ).
Χαχα. Φανταστικό :-)
Με λίγο ακόμα προσπάθεια, μπορείς να κάνεις και ένα background changer
που "παίζει random slide show" με βάση ένα κατάλογο, π.χ. με κάτι σαν
το παρακάτω εντελώς untested script :P
% #!/usr/bin/env bash
% #
% # bgslide.sh - switch KDE desktop backgrounds periodically
% #
%
% usage()
% {
% echo >&2 "usage: $(basename $0) FOLDER [ SECONDS ]"
% }
%
% warn()
% {
% echo >&2 "$(basename $0): WARNING: $*"
% }
%
% err()
% {
% errcode=$1
% shift
% echo >&2 "$(basename $0): ERROR: $*"
% cleanup
% exit $errcode
% }
%
% tmpfile=''
% cleanup()
% {
% if test -n "${tmpfile}" ; then
% /bin/rm -f "${tmpfile}"
% fi
% }
% trap "cleanup; exit 0" 0
% trap "cleanup; exit 1" 1 2 15
%
% pickrandomfile()
% {
% folder="$1"
% if test ! -d "${folder}/." ; then
% err 1 "${folder}: directory not found"
% fi
%
% tmpfile=$(mktemp "${TMPDIR:-/var/tmp/bgslide-XXX}")
% if test $/ -ne 0 ; then
% err 1 "temporary file creation failed"
% fi
%
% ( cd "$folder" ; find . \! -type d ) > "${tmpfile}" 2>/dev/null
% if test $? -ne 0 ; then
% err 1 "${folder}: cannot list directory contents"
% fi
%
% lines=$(wc -l "${tmpfile}")
% if test $? -ne 0 ; then
% err 1 "${tmpfile}: line count error"
% fi
%
% x=$(expr $RANDOM % $lines 2>/dev/null)
% if test $? -ne 0 ;then
% err 1 "expr: random line selection error"
% fi
%
% sed -ne "$x"p "${tmpfile}"
% if test $? -ne 0 ;then
% err 1 "${tmpfile}: random line selection error"
% fi
% }
%
% setbackground()
% {
% folder="$1"
% if test ! -d "${folder}/." ; then
% err 1 "${folder}: directory not found"
% fi
%
% selection=$(pickrandom "${folder}")
% if test $? -ne 0 ;then
% err 1 "${folder}: random file selection error"
% fi
%
% dcop kdesktop KBackgroundIface setWallpaper 0 \
% "${folder}/${selection}" 1
% if test $? -ne 0 ; then
% err 1 "dcop: failed to set background"
% fi
% }
%
% if test $# -ne 1 && test $# -ne 2 ; then
% usage ; exit 1
% fi
%
% folder="$1"
% sleepdefault="300"
% sleepseconds="$2"
%
% if test -n "$sleepseconds" ; then
% # Check that we have a numeric argument.
% expr "$sleepseconds" + 0 >/dev/null 2>&1
% if test $? -ne 0 ; then
% warn "${sleepseconds}: not a numeric value," \
% "using default = $sleepdefault"
% sleepseconds="$sleepdefault"
% fi
% else
% sleepseconds="$sleepdefault"
% fi
%
% while true ; do
% setbackground "${folder}"
% sleep "$sleepseconds"
% done
PS: Ναι, το UNIX είναι απίθανο λειτουργικό :-)
More information about the Linux-greek-users
mailing list