[Risolto] Scelta casuale sfondo desktop

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Ora puoi levare quel 48 hardcoded, perché sai contare il numero di elementi dell'array
e volendo puoi non usare file numrati.
Salva l'Ucraina! 🇺🇦
Avatar utente
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

Messaggio da Pehua »

UbuNuovo ha scritto:
giovedì 9 marzo 2023, 17:35
Ora puoi levare quel 48 hardcoded, perché sai contare il numero di elementi dell'array
e volendo puoi non usare file numrati.
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 :birra:
Avatar utente
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

Messaggio da Pehua »

Filoteo ha scritto:
giovedì 9 marzo 2023, 12:44
Scrivi 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.
Ora ho capito cosa dicevi... :D

@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
Grazie mille ragazzi e spero di aver compreso quello che avete suggerito, mi farete sapere.

Buona serata. :birra:
Al di la delle impostazioni culturali :birra:
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

L'ho guardato ora :mumble:
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
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

readarray -t NOME_ARRAY< <(find "$PATH_SFONDI" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$'|sort)
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.
Salva l'Ucraina! 🇺🇦
Avatar utente
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

Messaggio da Pehua »

UbuNuovo ha scritto:
giovedì 9 marzo 2023, 19:14
L'ho guardato ora :mumble:
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
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

readarray -t NOME_ARRAY< <(find "$PATH_SFONDI" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$'|sort)
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.
Mhh vediamo:

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
La verifica della cartella no mi serve perchè non devo darlo a qualcuno e la corretta esecuzione di gsettings non ho idea di come si possa fare se non testando lo script :lol:

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 :birra:
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Vuoi che ti riposti la gif di "quale gobba"? :devilmad:
:D Sì, ora è molto meglio.
find studialo che è utilissimo, di più, è fondamentale!
sort ordina i dati, è semplice, guarda man sort.

Ottimo lavoro :birra:
Ciaux
Salva l'Ucraina! 🇺🇦
Avatar utente
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

Messaggio da Pehua »

UbuNuovo ha scritto:
giovedì 9 marzo 2023, 19:55
Vuoi che ti riposti la gif di "quale gobba"? :devilmad:
:D Sì, ora è molto meglio.
find studialo che è utilissimo, di più, è fondamentale!
sort ordina i dati, è semplice, guarda man sort.

Ottimo lavoro :birra:
Ciaux
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)'
Si dai ripostala hahahahhha scherzo :lol:
Al di la delle impostazioni culturali :birra:
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

è < <(find ... non << (find
path_sfo="$HOME/Immagini/Sfondi" mettilo fuori dal ciclo (prima), inutile riassegnare sempre lo stesso valore.
Dopo cena provo lo script.
Salva l'Ucraina! 🇺🇦
Avatar utente
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

Messaggio da Pehua »

UbuNuovo ha scritto:
giovedì 9 marzo 2023, 20:05
è < <(find ... non << (find
path_sfo="$HOME/Immagini/Sfondi" mettilo fuori dal ciclo (prima), inutile riassegnare sempre lo stesso valore.
Dopo cena provo lo script.
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)
Sempre errore da.

EDITTO

Porcavacca, cosi funziona :lol:

Codice: Seleziona tutto

readarray -t files< <(find "$path_sfo" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$' | sort)
Non credevo all importanza di quella freccetta, deve stare attaccata alle parentesi. Ok
Al di la delle impostazioni culturali :birra:
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

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.

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
edit: eliminato sort come giustamente fatto notare da Filoteo
Ultima modifica di UbuNuovo il giovedì 9 marzo 2023, 21:15, modificato 1 volta in totale.
Salva l'Ucraina! 🇺🇦
Avatar utente
Filoteo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1318
Iscrizione: venerdì 28 agosto 2015, 9:38
Desktop: Gnome
Distribuzione: Arch Linux

Re: [Risolto] Scelta casuale

Messaggio da Filoteo »

UbuNuovo ha scritto:
giovedì 9 marzo 2023, 19:55
sort ordina i dati, è semplice, guarda man sort.

A cosa serve in questo script?
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

In questo script a nulla. :D
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! 🇺🇦
Avatar utente
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

Messaggio da Pehua »

Bene allora, tutto a porno!! hahah

Ciao raga buona serata e ancora grazie pere tutte le info e l' aiuto. :birra:
Al di la delle impostazioni culturali :birra:
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Sì, levalo. :sisi:
Potresti cambiare il titolo della discussione in "[Risolto] Scelta casuale sfondo desktop"
grazie pere
:lol: Viva le pere! E anche le mele! :D
Ciaux
Salva l'Ucraina! 🇺🇦
Avatar utente
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

Messaggio da Pehua »

UbuNuovo ha scritto:
giovedì 9 marzo 2023, 21:00
Sì, levalo. :sisi:
Potresti cambiare il titolo della discussione in "[Risolto] Scelta casuale sfondo desktop"
grazie pere
:lol: Viva le pere! E anche le mele! :D
Ciaux
Opsss, Lapsus Freudiano :D

Tolto tolto...
Al di la delle impostazioni culturali :birra:
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti