[Risolto] Scelta casuale sfondo desktop
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4433
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [Risolto] Scelta casuale
Ora puoi levare quel 48 hardcoded, perché sai contare il numero di elementi dell'array
e volendo puoi non usare file numrati.
e volendo puoi non usare file numrati.
Salva l'Ucraina!
- Pehua
- Prode Principiante
- Messaggi: 241
- Iscrizione: martedì 19 aprile 2022, 9:02
- Desktop: Ubuntu
- Distribuzione: Ubuntu 22.04.4 LTS
- Sesso: Maschile
Re: [Risolto] Scelta casuale
Credo di aver compreso:
Codice: Seleziona tutto
#!/bin/bash
# Creo array files che contiene tutti i nomi dei file nella cartella
declare -a files=( $HOME/Scrivania/Test/* )
# Variabile comprende tutti gli elementi contenuti nell array, autoconteggio se vogliamo
num=${#files[@]}
# Variabile randomizzata dei file
file=$(( $RANDOM % $num ))
# Variabile stampa file a caso fra tutti gli elementi dell array
sfo=$(echo "${files[$file]}" | cut -d "/" -f 6)
# Stampa variabile del file da usare come sfondo
echo "File: $sfo"
# Stampa tutti gli elementi array, numero intero
echo "Elementi array: ${#files[@]}"
Al di la delle impostazioni culturali
- Pehua
- Prode Principiante
- Messaggi: 241
- Iscrizione: martedì 19 aprile 2022, 9:02
- Desktop: Ubuntu
- Distribuzione: Ubuntu 22.04.4 LTS
- Sesso: Maschile
Re: Scelta casuale
Ora ho capito cosa dicevi...Filoteo ha scritto: ↑giovedì 9 marzo 2023, 12:44Scrivi uno script che inserisca tutti nomi dei file in un array, generi un numero casuale che va da zero al numero totale di elementi nell'array e usi questo numero come indice dell'array in modo da selezionare un file casuale. Il nome che hanno i file non è rilevante.
@UbuNuovo e @Filoteo
Questo lo script, come promesso:
Codice: Seleziona tutto
#!/bin/bash
while true; do
declare -a files=( $HOME/Immagini/Sfondi/* )
num=${#files[@]}
file=$(( $RANDOM % $num ))
sfo=$(echo "${files[$file]}" | cut -d "/" -f 6) # Senza taglio passo a gsettings il percorso intero volendo
gsettings set org.gnome.desktop.background picture-uri-dark $HOME/Immagini/Sfondi/$sfo
gsettings set org.gnome.desktop.background picture-options 'scaled'
sleep 15m
done
Buona serata.
Al di la delle impostazioni culturali
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4433
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [Risolto] Scelta casuale
L'ho guardato ora
non hai messo in pratica i suggerimenti: imposta una variabile per il path, indenta il codice while etc..
Poi altri appunti
Cerca di non usare nomi di variabili corrispondenti a comandi esistenti (per esempio 'file' che stampa il tipo di file).
Dai nomi descrittivi del contenuto delle variabili, perché chiamare 'file' una variabile che conterrà un numero da usare come indice?
A che ti serve tagliare il path per poi riaggiungerlo nella riga di gsettings? Puoi usare;
Ti consiglierei di usare readarray -t NOME_ARRAY che funziona bene anche con nomi di file con spazi, senza bisogno di modificare $IFS; inoltre è meglio utilizzare find in modo da non "prendere" eventuali file di tipo sbagliato, quindi:
Fatto questo, sarebbe bene mettere dei controlli; verificare almeno: esistenza della directory degli sfondi e corretta esecuzione di gsettings.
Continua così e vedrai che presto tutto ti sembrerà più semplice.
non hai messo in pratica i suggerimenti: imposta una variabile per il path, indenta il codice while etc..
Poi altri appunti
Cerca di non usare nomi di variabili corrispondenti a comandi esistenti (per esempio 'file' che stampa il tipo di file).
Dai nomi descrittivi del contenuto delle variabili, perché chiamare 'file' una variabile che conterrà un numero da usare come indice?
A che ti serve tagliare il path per poi riaggiungerlo nella riga di gsettings? Puoi usare;
Codice: Seleziona tutto
sfo=${files[$file]}
gsettings set org.gnome.desktop.background picture-uri-dark $sfo
Codice: Seleziona tutto
readarray -t NOME_ARRAY< <(find "$PATH_SFONDI" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$'|sort)
Continua così e vedrai che presto tutto ti sembrerà più semplice.
Salva l'Ucraina!
- Pehua
- Prode Principiante
- Messaggi: 241
- Iscrizione: martedì 19 aprile 2022, 9:02
- Desktop: Ubuntu
- Distribuzione: Ubuntu 22.04.4 LTS
- Sesso: Maschile
Re: [Risolto] Scelta casuale
Mhh vediamo:UbuNuovo ha scritto: ↑giovedì 9 marzo 2023, 19:14L'ho guardato ora
non hai messo in pratica i suggerimenti: imposta una variabile per il path, indenta il codice while etc..
Poi altri appunti
Cerca di non usare nomi di variabili corrispondenti a comandi esistenti (per esempio 'file' che stampa il tipo di file).
Dai nomi descrittivi del contenuto delle variabili, perché chiamare 'file' una variabile che conterrà un numero da usare come indice?
A che ti serve tagliare il path per poi riaggiungerlo nella riga di gsettings? Puoi usare;Ti consiglierei di usare readarray -t NOME_ARRAY che funziona bene anche con nomi di file con spazi, senza bisogno di modificare $IFS; inoltre è meglio utilizzare find in modo da non "prendere" eventuali file di tipo sbagliato, quindi:Codice: Seleziona tutto
sfo=${files[$file]} gsettings set org.gnome.desktop.background picture-uri-dark $sfo
Fatto questo, sarebbe bene mettere dei controlli; verificare almeno: esistenza della directory degli sfondi e corretta esecuzione di gsettings.Codice: Seleziona tutto
readarray -t NOME_ARRAY< <(find "$PATH_SFONDI" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$'|sort)
Continua così e vedrai che presto tutto ti sembrerà più semplice.
Codice: Seleziona tutto
#!/bin/bash
while true; do
# Cartella contenente gli sfondi da visualizzare
path_sfo="$HOME/Immagini/Sfondi"
# Creo array files che contiene tutti i nomi dei file nella cartella
readarray -t files << (find "$path_sfo" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$' | sort)
# Variabile comprende tutti gli elementi contenuti nell array, autoconteggio se vogliamo
num=${#files[@]}
# Variabile randomizzata dei file che userò come indice dell array
indice=$(( $RANDOM % $num ))
# Variabile stampa file a caso fra tutti gli elementi dell array
sfo=$(echo "${files[$indice]}")
# Imposta sfondo
gsettings set org.gnome.desktop.background picture-uri-dark "$sfo"
gsettings set org.gnome.desktop.background picture-options 'scaled'
# Tempo di cambio per prossimo sfondo
sleep 20m
done
Quel comando find non è semplice ma vedrò di capirci di più, sort non capisco cosa c' entra...
L' indentazione la faccio a caso solo per rendere, effettivamente, lo script più facile da leggere, ma non seguo regole che credo in bash non ci siano.
Comunque mi ritengo soddisfatto, fino a qualche ora fa non sapevo neanche decifrare il messaggio di @Filoteo heheheh
Va bene comunque cosi lo script? A fungere funge!
PS: Se vuoi, sono un chirurgo di una certa fama, sai, per quella gobba...
hahahahahhhah
EDIT
No mi da errore:
Codice: Seleziona tutto
$ ./sfondo-new.sh
./sfondo-new.sh: riga 8: errore di sintassi vicino al token non atteso "("
./sfondo-new.sh: riga 8: ` readarray -t files << (find "$path_sfo" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$' | sort)'
Al di la delle impostazioni culturali
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4433
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [Risolto] Scelta casuale
Vuoi che ti riposti la gif di "quale gobba"?
Sì, ora è molto meglio.
find studialo che è utilissimo, di più, è fondamentale!
sort ordina i dati, è semplice, guarda man sort.
Ottimo lavoro
Ciaux
Sì, ora è molto meglio.
find studialo che è utilissimo, di più, è fondamentale!
sort ordina i dati, è semplice, guarda man sort.
Ottimo lavoro
Ciaux
Salva l'Ucraina!
- Pehua
- Prode Principiante
- Messaggi: 241
- Iscrizione: martedì 19 aprile 2022, 9:02
- Desktop: Ubuntu
- Distribuzione: Ubuntu 22.04.4 LTS
- Sesso: Maschile
Re: [Risolto] Scelta casuale
GRazie ma forse non hai letto l' errore che mi da, l' ho scritto in EDIT.
Comunque:
Codice: Seleziona tutto
$ ./sfondo-new.sh
./sfondo-new.sh: riga 8: errore di sintassi vicino al token non atteso "("
./sfondo-new.sh: riga 8: ` readarray -t files << (find "$path_sfo" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$' | sort)'
Al di la delle impostazioni culturali
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4433
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [Risolto] Scelta casuale
è < <(find ... non << (find
path_sfo="$HOME/Immagini/Sfondi" mettilo fuori dal ciclo (prima), inutile riassegnare sempre lo stesso valore.
Dopo cena provo lo script.
path_sfo="$HOME/Immagini/Sfondi" mettilo fuori dal ciclo (prima), inutile riassegnare sempre lo stesso valore.
Dopo cena provo lo script.
Salva l'Ucraina!
- Pehua
- Prode Principiante
- Messaggi: 241
- Iscrizione: martedì 19 aprile 2022, 9:02
- Desktop: Ubuntu
- Distribuzione: Ubuntu 22.04.4 LTS
- Sesso: Maschile
Re: [Risolto] Scelta casuale
Buona cena, comunque l' errore persiste.
Codice: Seleziona tutto
readarray -t files << (find "$path_sfo" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$' | sort)
Codice: Seleziona tutto
readarray -t files < < (find "$path_sfo" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$' | sort)
Codice: Seleziona tutto
readarray -t files< < (find "$path_sfo" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$' | sort)
EDITTO
Porcavacca, cosi funziona
Codice: Seleziona tutto
readarray -t files< <(find "$path_sfo" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$' | sort)
Al di la delle impostazioni culturali
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4433
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [Risolto] Scelta casuale
Ho levato un po' di vuoti, per avere tutto sott'occhio, corretta la sintassi < <(, levato il dollaro da $num in $RANDOM, non serve e mi pare che funga senza problemi.
edit: eliminato sort come giustamente fatto notare da Filoteo
Codice: Seleziona tutto
#!/bin/bash
# Cartella contenente gli sfondi da visualizzare
path_sfo="$HOME/Immagini/Sfondi"
while true; do
# Creo array files che contiene tutti i nomi dei file nella cartella
readarray -t files < <(find "$path_sfo" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$')
# Variabile comprende tutti gli elementi contenuti nell array, autoconteggio se vogliamo
num=${#files[@]}
# Variabile randomizzata dei file che userò come indice dell array
indice=$(( $RANDOM % num ))
# Variabile stampa file a caso fra tutti gli elementi dell array
sfo=$(echo "${files[$indice]}")
# Imposta sfondo
gsettings set org.gnome.desktop.background picture-uri-dark "$sfo"
gsettings set org.gnome.desktop.background picture-options 'scaled'
# Tempo di cambio per prossimo sfondo
sleep 20m
done
Ultima modifica di UbuNuovo il giovedì 9 marzo 2023, 21:15, modificato 1 volta in totale.
Salva l'Ucraina!
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4433
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [Risolto] Scelta casuale
In questo script a nulla.
L'avevo messo per avere l'output ordinato per vedere l'immagine che volevo io.
Probabilmente anche perché avevo in mente il funzionamento del mio vecchio script in modalità slideshow
L'avevo messo per avere l'output ordinato per vedere l'immagine che volevo io.
Probabilmente anche perché avevo in mente il funzionamento del mio vecchio script in modalità slideshow
Salva l'Ucraina!
- Pehua
- Prode Principiante
- Messaggi: 241
- Iscrizione: martedì 19 aprile 2022, 9:02
- Desktop: Ubuntu
- Distribuzione: Ubuntu 22.04.4 LTS
- Sesso: Maschile
Re: [Risolto] Scelta casuale
Bene allora, tutto a porno!! hahah
Ciao raga buona serata e ancora grazie pere tutte le info e l' aiuto.
Ciao raga buona serata e ancora grazie pere tutte le info e l' aiuto.
Al di la delle impostazioni culturali
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4433
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [Risolto] Scelta casuale
Sì, levalo.
Potresti cambiare il titolo della discussione in "[Risolto] Scelta casuale sfondo desktop"
Ciaux
Potresti cambiare il titolo della discussione in "[Risolto] Scelta casuale sfondo desktop"
Viva le pere! E anche le mele!grazie pere
Ciaux
Salva l'Ucraina!
- Pehua
- Prode Principiante
- Messaggi: 241
- Iscrizione: martedì 19 aprile 2022, 9:02
- Desktop: Ubuntu
- Distribuzione: Ubuntu 22.04.4 LTS
- Sesso: Maschile
Re: [Risolto] Scelta casuale
Opsss, Lapsus Freudiano
Tolto tolto...
Al di la delle impostazioni culturali
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti