Pehua ha scritto: ↑giovedì 9 marzo 2023, 6:42
Uno simile l' avevo trovato in rete.
Io ne ho buttato giù uno ma non funziona e non capisco il perchè:
Codice: Seleziona tutto
#!/bin/bash
while [ 1 ]; do
imm=`ls ~/Scrivania/Test` && imm=$RANDOM
gsettings set org.gnome.desktop.background picture-uri-dark ~/Scrivania/Test/"$imm.jpg"
gsettings set org.gnome.desktop.background picture-options 'scaled'
sleep 30
done
Non capisco perchè non funziona ...
Non può funzionare, a meno che le immagini non siano numerate con un range numerico corrispondente a quello impostato per
$RANDOM.
$RANDOM genera un numero pseudocasuale, se vuoi solo rimescolare gli elementi ti conviene usare
shuf come già suggerito da Lucio C e GjMan78.
Ho suggerito
$RANDOM per utilizzarlo su eventuali indici di un array (che ti permette di ottenere facilmente altre funzionalità).
Qualche suggerimento per gli script Bash:
In caso di problemi puoi fare il debug eseguendo lo script con
-x nello shabang
#!/bin/bash -x
oppure eseguendo lo script con:
io non uso quasi mai questo metodo, preferisco mettere un
echo d'avanti a variabili o comandi problematici, per vedere cosa/come viene generato, poi, a volte, metto
exit prima del codice che non mi interessa eseguire.
Usare
ls /path , spesso è da evitare, specialmente nel ciclo
for... te ne accorgerai.
prova ad eseguire, in una directory con file che hanno spazi nei nomi, il codice che hai scritto:
Indenta il codice, anche se in Bash non è obbligatorio, lo rende più comprensibile.
Invece di usare
`COMANDO` utilizza
$(COMANDO) che si individua meglio e permette l'annidamento.
Nomi di file, directory o di qualunque cosa che deve essere inserito dall'utente, assegnali a variabili ad inizio script, tipo:
dir_sfondi="$HOME/test/sfondi" e poi le utilizzi all'interno del codice
COMANDO "$dir_sfondi"
&& va usato quando serve verificare il successo del comando che lo precede; per esempio:
COMANDO && echo 'comando eseguito' || exit
Per conto mio, negli script è meglio usare
$HOME/ invece di
~/, perché la variabile tra doppi apici viene espansa regolarmente, a differenza di
~/. Es.:
Codice: Seleziona tutto
8-) imm='pinco pallo'
8-) file_sfondo="~/Scrivania/Test/$imm.jpg"
8-) echo "$file_sfondo"
~/Scrivania/Test/pinco pallo.jpg
8-) file_sfondo="$HOME/Scrivania/Test/$imm.jpg"
8-) echo "$file_sfondo"
/home/ubunuovo/Scrivania/Test/pinco pallo.jpg
8-)
while [ 1 ]; do ... mi sembra la sintassi più complicata, mi pare meglio
while true; do ... o, se vuoi scrivere poco,
while :; do ....
edit: Per gli array fatti una googleata cercando 'array bash', è semplice.
Poi quando li saprai usare cerca 'array associativi bash', ci sono anche quelli, anche se in Bash sono molto limitati.
Ciaux