[Risolto] Scelta casuale sfondo desktop

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Pehua
Prode Principiante
Messaggi: 241
Iscrizione: martedì 19 aprile 2022, 9:02
Desktop: Ubuntu
Distribuzione: Ubuntu 22.04.4 LTS
Sesso: Maschile

[Risolto] Scelta casuale sfondo desktop

Messaggio da Pehua »

Ciao ragazzi, ho un piccolo script che mi cambia sfondo preso da una cartella ogni 20 minuti, funziona bene e l`ho impostato all' avvio del sistemna, ma avrei una necessità.

Intanto posto lo script:

Codice: Seleziona tutto

#!/bin/bash
for imm in `ls ~/Immagini/Sfondi`; do
gsettings set org.gnome.desktop.background picture-uri-dark ~/Immagini/Sfondi/$imm
gsettings set org.gnome.desktop.background picture-options 'scaled'
sleep 20m
done
È comodo perchè mi basta mettere immagini nella cartella e le carica da solo cambiandole ogni 20 minuti, ma succede che primo, ho sempre lo stesso ordine di immagini e secondo, comincio ad avere una 50 ina di sfondi e non vedrò mai gli ultimi, cosi, pensavo fosse interessante rendere la scelta dello sfondo casuale, con la stessa dinamica, scelta dalla cartella senza specificare i files ma che sia casuale invece che con l¡ ordine dato da ls.

Non ho idea di come scrivere un comando del genere.

Si può fare?
Ultima modifica di Pehua il giovedì 9 marzo 2023, 21:09, modificato 2 volte in totale.
Al di la delle impostazioni culturali :birra:
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5503
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Scelta casuale

Messaggio da GjMan78 »

MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 371
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: Scelta casuale

Messaggio da Lucio C »

Due suggerimenti, uno generale e uno particolare.

1) se si vuole trovare un comando che fa qualcosa, usare "apropos". P.es. "apropos random" mi riporta l'elenco di tutte le manpages che contengono la parola "random" (io ho il sistema in inglese). Tra queste cerco quelle di tipo (1), ossia comandi di shell da utente, e trovo (anzi ritrovo) il seguente comando: shuf
(dico ritrovo perche' in uno script lo avevo gia' usato ma non mi ricordavo come si chiamasse ... di solito faccio generazione di numeri casuali in altri linguaggi, dove ci sono comandi come random, randu ecc.

2) quindi suggerisco di leggere man shuf (shuf deriva da shuffle, che vuol dire mescolare un mazzo di carte) e adattare la sequenza di chiamata a quello che si vuol fare.

P.es. questo pezzettino di uno script piu' lungo (purtroppo per voi e' csh perche' quello io conosco) prende due liste (una di font e una di dimensioni) di uguale lunghezza, poi chiama shuf per ottenere un numero tra 1 e il numero di elementi nelle liste (o 0 e numero-1, non ricordo) ... $#fonts e' il numero di elementi nella lista $fonts, mentre $fonts[$n] e' l'n-simo elemento della lista .... traducetelo voi in bash

Codice: Seleziona tutto

set noglob 
set fonts = ('ani regular' 'chilanka regular' 'gentium basic bold italic' 'isabella italic' 'urw bookman light italic' 'mathjax_fraktur bold' 'texgyrechorus' 'P052 bold italic' 'purisa oblique')
set sizes = (20 20 22 24 20 18 18 20 25)
set n = `shuf -i1-$#fonts -n1`
set font = ( $fonts[$n] )
set size = ( $sizes[$n] )
A posteriori direi che p.es. shuf -i1-100 -n1 ritorna il primo (-n1) numero a caso tra 1 e 100 (ma controllate la man page)
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4446
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Scelta casuale

Messaggio da UbuNuovo »

Per conto mio il modo più semplice, con Bash, è usare RANDOM
Per esempio, per generare un numero pseudo casuale tra 1 e 100:

Codice: Seleziona tutto

echo $((1 + RANDOM % 100))
Tanti anni fa avevo fatto uno script che permetteva di: cambiare gli sfondi ogni tot secondi, andare avanti, indietro, fermare e impostare uno sfondo predefinito, il tutto passando i vari parametri allo stesso script.
Ti conviene mettere i file da usare in una data directory e inserirli in un array, poi ti puoi riferire alle varie immagini, per il cambio sequenziale o casuale basandoti sull'indice.

Codice: Seleziona tutto

bg=( $(find "$dir_scan" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)') )
Anche il tipo di scalatura lo avevo messo in un array, per esempio:

Codice: Seleziona tutto

declare -a scalature=('scaled' 'spanned' 'spanned' 'scaled' 'scaled' 'scaled' 'scaled' 'scaled' 'scaled' 'scaled' 'scaled' 'scaled')
l'indice corrispondeva all'immagine con lo stesso indice (in base alla risoluzione).
i parametri che riguardavano le immagini erano (per mate):

Codice: Seleziona tutto

gsettings set org.mate.background primary-color "$bg_color"
gsettings set org.mate.background picture-filename "$bgf"
gsettings set org.mate.background picture-options $scalatura
Se proprio vuoi te lo posto, ma so che ci puoi arrivare da solo, con maggiore soddisfazione. :)
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: Scelta casuale

Messaggio da Pehua »

Intanto grazie a tutti!

Ho trovato per conto mio questa soluzione trovando la variabile random in internet ed ho creato sta cosa :lol:

Codice: Seleziona tutto

cd ~/Immagini/Sfondi
for i in `ls`
do
mv "$i" "$RANDOM.jpg"
done
Cosi mescola le "carte" e dopo parte lo script che gia aveo fatto prima (quello che o postato su) ed ho racchiuso il tutto il un loop con while in modo che si ripeta una volta finite le immagini.
Cosi da avere un ordine casuale ed un cambiamento ad ogni fine ciclo o/e ad ogni riavvio.

@UbuNuovo domani appena avrò tempo mi ci metto un po e vediamo che esce.

Grazie a tutti e buonanotte ragazzi!

Quindi lo script intero per ora è questo:

Codice: Seleziona tutto

#!/bin/bash

while [ 1 ]; do # Si potrebbero anche usare i : ma fa lo stesso

# Mescola rinominando i files in maniera casuale
cd ~/Immagini/Sfondi # Questo un modo per essere sicuro di non fare disastri in altre cartelle
for i in `ls`
do
mv "$i" "$RANDOM.jpg"
done

# Parte il ciclo di cambio ogni 20 minuti
for imm in `ls ~/Immagini/Sfondi`; do
gsettings set org.gnome.desktop.background picture-uri-dark ~/Immagini/Sfondi/$imm
gsettings set org.gnome.desktop.background picture-options 'scaled'
sleep 20m
done

done
Al di la delle impostazioni culturali :birra:
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5503
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Scelta casuale

Messaggio da GjMan78 »

La mia proposta

Codice: Seleziona tutto

#!/bin/bash

src="/home/riccardo/Immagini/Wallpaper" #inserisci il percorso corretto

ls $src | shuf |while read file; do
        gsettings set org.gnome.desktop.background picture-uri-dark $file
        gsettings set org.gnome.desktop.background picture-options 'scaled'
        sleep 20m
done
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
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 »

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 visto che se do solo:

Codice: Seleziona tutto

imm=`ls ~/Scrivania/Test` && imm=$RANDOM && echo "$imm.jpg"
Mi scrive sempre un numero diverso.jpg

Ma lo schermo rimane nero :o

In generale non so come passare ls a RANDOM, anche se i nomi dei files sono numeri.jpg, non trovo la maniera, ma mi ci metto oggi quando avro tempo.
Al di la delle impostazioni culturali :birra:
Avatar utente
Filoteo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1322
Iscrizione: venerdì 28 agosto 2015, 9:38
Desktop: Gnome
Distribuzione: Arch Linux

Re: Scelta casuale

Messaggio da Filoteo »

Non funziona perché non hai tante immagini quanti sono i possibili valori di $RANDOM, cioè 2^15 = 32768.

EDIT: sono 2^15 valori, da 0 a 32767
Ultima modifica di Filoteo il giovedì 9 marzo 2023, 12:39, modificato 2 volte in totale.
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, 9:32
Non funziona perché non hai tante immagini quanti sono i possibili valori di $RANDOM, cioè (2^15)-1 = 32767.
È vero!!! :D

A dire il vero con la soluzione che ho trovato (Lo script che ho postato poco su) ho risolto, ma per capa tosta, voglio provare anche con gli "indizi" di UbuNuovo, anche se non conosco array e non so come passare a RANDOM in modo che mi legga la variabile che contiene i files nella cartella a caso.

Ho provato un po di cose al volo, ma non ci sono riuscito, spero di avere un po di tempo in pace per concentrarmi meglio.

Sicuro ci proverò, anche per capire sintassi a me nuove e magari semplificate, ma ho tante lacune nella specifica tematica, menomale che non mi manca la fantasia che alla fine mi fa sempre o quasi trovare la soluzione, non la migliore ma funzionante ;)
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 »

UbuNuovo ha scritto:
mercoledì 8 marzo 2023, 23:34
Per conto mio il modo più semplice, con Bash, è usare RANDOM
Per esempio, per generare un numero pseudo casuale tra 1 e 100:

Codice: Seleziona tutto

echo $((1 + RANDOM % 100))
Tanti anni fa avevo fatto uno script che permetteva di: cambiare gli sfondi ogni tot secondi, andare avanti, indietro, fermare e impostare uno sfondo predefinito, il tutto passando i vari parametri allo stesso script.
Ti conviene mettere i file da usare in una data directory e inserirli in un array, poi ti puoi riferire alle varie immagini, per il cambio sequenziale o casuale basandoti sull'indice.

Codice: Seleziona tutto

bg=( $(find "$dir_scan" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)') )
Anche il tipo di scalatura lo avevo messo in un array, per esempio:

Codice: Seleziona tutto

declare -a scalature=('scaled' 'spanned' 'spanned' 'scaled' 'scaled' 'scaled' 'scaled' 'scaled' 'scaled' 'scaled' 'scaled' 'scaled')
l'indice corrispondeva all'immagine con lo stesso indice (in base alla risoluzione).
i parametri che riguardavano le immagini erano (per mate):

Codice: Seleziona tutto

gsettings set org.mate.background primary-color "$bg_color"
gsettings set org.mate.background picture-filename "$bgf"
gsettings set org.mate.background picture-options $scalatura
Se proprio vuoi te lo posto, ma so che ci puoi arrivare da solo, con maggiore soddisfazione. :)
Allora, mettere in un array i file intendi?:

Codice: Seleziona tutto

files=`ls ~/cartella/sfondi`
Poi come mi "prendo" un immagine per volta a caso? Ho tentato ma non riesco a passare a RANDOM i valori nella cartella.
Per questo ho usato un ciclo for che ad ogni ciclo mi prende la variabile che usa per indicare quale sfondo mettere, ho provato ad usare RANDOM ma per come ho fatto i tentativi ho solo errori oppure come mi ha fatto notare @Filoteo ho usato in maniera errata RANDOM che non mi legge i files ma va a caso nel suo range.
Per come mi hai postato l' uso di random:

Codice: Seleziona tutto

echo $((1 + RANDOM % 100))
Non voglio usarlo a numero fisso, ma avere una casualità per qualsiasi immagine che metterò nella cartella sfondi, ora ne ho 48 ma se ne trovo nuovi, li metto nella cartella Sfondi e deve fare tutto lo script.
Ci sono riuscito con lo script postato che funziona, ma non capisco questo modo e mi piacerebbe capire cosa intendi, non lo script fatto.

Lo script funzionante è questo:
viewtopic.php?p=5330364#p5330364
Al di la delle impostazioni culturali :birra:
Avatar utente
Filoteo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1322
Iscrizione: venerdì 28 agosto 2015, 9:38
Desktop: Gnome
Distribuzione: Arch Linux

Re: Scelta casuale

Messaggio da Filoteo »

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.
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 371
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: Scelta casuale

Messaggio da Lucio C »

Quello che fa shuf
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
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.
Ripeto , non conosco queste cose, comunques to cercando in rete per cercare di capire di più ed ho provato questa cosa:

Codice: Seleziona tutto

#!/bin/bash

# Cartella contenente i files, vengono elencati tutti
cart=`ls ~/Scrivania/Test`

# Creo array files che contiene tutti i nomi dei file nella cartella
declare -a files=( "$cart" )

# Scelgo il primo valore da stampare
echo "${files[1]}"
Non funziona, puoi spiegarmelo dove sbaglio e come funziona?

Inoltre non saprei come passargli la scelta casuale usando RANDOM

Ho pensato cosi ma non funziona:

Codice: Seleziona tutto

echo "${files["$RANDOM"]}"
Per fare solo un esperimento con echo, anche se poi devo individuare la giusta variablle da passare al comando gsettings per impostare lo sfondo.

So che sarà facile per alcuni di voi ma io non conosco queste cose sto solo cercando di capirle ma il linguaggio che si usa non è familiare, è come se io ti parlassi in tedesco, probabilmente non capiresti una parola ma cio che dico ha senso. Ecco sto cosi :lol:
Al di la delle impostazioni culturali :birra:
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4446
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Scelta casuale

Messaggio da UbuNuovo »

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:

Codice: Seleziona tutto

bash -x nomescript
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. :asd:
prova ad eseguire, in una directory con file che hanno spazi nei nomi, il codice che hai scritto:

Codice: Seleziona tutto

for i in `ls`; do echo "$i";done
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
Salva l'Ucraina! 🇺🇦
Avatar utente
Filoteo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1322
Iscrizione: venerdì 28 agosto 2015, 9:38
Desktop: Gnome
Distribuzione: Arch Linux

Re: Scelta casuale

Messaggio da Filoteo »

Pehua ha scritto:
giovedì 9 marzo 2023, 13:33
So che sarà facile per alcuni di voi ma io non conosco queste cose sto solo cercando di capirle ma il linguaggio che si usa non è familiare

Il linguaggio viene dopo, prima pensa a un algoritmo su carta e penna. Io ne ho suggerito uno.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4446
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Scelta casuale

Messaggio da UbuNuovo »

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.
Il linguaggio viene dopo, prima pensa a un algoritmo su carta e penna. Io ne ho suggerito uno.
Giustissimo, prima però deve sapere come usare gli array. :)
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: Scelta casuale

Messaggio da Pehua »

@UbuNuovo Grazie dei preziosi consigli che mi appunterò e seguirò.

@Filoteo Grazie anche a te, non è che non comprenda la logica, mi manca la base di conoscenza di sintassi e il meccanismo di certe cose, fra cui gli array.

Diciamo che conosco l' ABCDE, se voglio espandere la mia conoscenza in tale ambito farò delle ricerche e vedrò di aggiungere "F" :lol:

In fin dei conti lo faccio per passione ed hobby, mi diverte e mi piace.

Quindi metto risolto perchè come già detto, il mio "sciocco" script funziona.

Quando saprò di più in merito e se me ne ricorderò, posterò la nuova versione dello script. :D

Intanto vado a cercarmi di più sugli array che ora ho compreso un po di più di zero.

Grazie a tutti, anche a @Lucio C e @GjMan78 ovviemente, veedrò anche questo comando (shuf) e la "dritta" di Lucio per la ricerca dei comandi con apropos, tutto molto istruttivo.

A presto ragazzi. :birra:
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: [Risolto] Scelta casuale

Messaggio da Pehua »

Ok qualcosa ho fatto :D

Codice: Seleziona tutto

#!/bin/bash

# Creo array files che contiene tutti i nomi dei file nella cartella
declare -a files=( $HOME/Scrivania/Test/* )

# Variabile randomizzata dei file
file=$(( $RANDOM % 48 ))

# Stampa file a caso fra i 48
echo "${files[$file]}" | cut -d "/" -f 6
Ho trovato questo giro di variabili per avere il risultato sperato e sembra funzionare, ho usato un array con i file della cartella bersaglio e randomizzato la variabile file cosi che mi generi sempre un numero "pseudocasuale" come indice (indice=Giusto?)

Una cosa, ora ho usato il numero di file nella cartella: 48, ma come uso RANDOM per indicare tutti i file presenti senza indicargli il numero?
Se stasera aggiungo uno sfondo dovrei cambiare lo script e mettere 49...

Grazie ;)
Al di la delle impostazioni culturali :birra:
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4446
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 »

Non ti arrendere. :)
Tutto quello che ti serve, che ancora non conosci bene, è basato sul codice d'esempio che segue.

Per quanto riguarda random, puoi usare le variabili:

Codice: Seleziona tutto

8-) min=0
8-) max=48
8-) n_random=$((min + RANDOM % max))
8-) echo $n_random
29
Per creare un array contenente path e file, contare gli elementi di un array e visualizzarli:

Codice: Seleziona tutto

8-) dir_sfondi="$HOME/Scrivania/Pehua/sfondi_casuali/test" 
8-) readarray -t array_img < <(find "$dir_sfondi" -maxdepth 1 -type f -iregex '.*\.\(jpg\|jpeg\|png\)$'|sort)
8-) echo "${array_img[@]}"
/home/ubunuovo/Scrivania/Pehua/sfondi_casuali/test/belle topolone.png /home/ubunuovo/Scrivania/Pehua/sfondi_casuali/test/gnocca_imperiale.png /home/ubunuovo/Scrivania/Pehua/sfondi_casuali/test/gnocca_mora_primo_piano.jpg /home/ubunuovo/Scrivania/Pehua/sfondi_casuali/test/miss_topless.png /home/ubunuovo/Scrivania/Pehua/sfondi_casuali/test/mora_che_sbuca_dalla_foto.png /home/ubunuovo/Scrivania/Pehua/sfondi_casuali/test/mora_mezzagnuda.png /home/ubunuovo/Scrivania/Pehua/sfondi_casuali/test/super_gatto.jpg /home/ubunuovo/Scrivania/Pehua/sfondi_casuali/test/super_topa.jpg /home/ubunuovo/Scrivania/Pehua/sfondi_casuali/test/topolona_in_intimo.png

# contare gli elementi
8-) num_di_img=${#array_img[@]}
8-) echo $num_di_img
9

# visualizzare il primo elemento
8-) echo "${array_img[0]}"
/home/ubunuovo/Scrivania/Pehua/sfondi_casuali/test/belle topolone.png

# usare una variabile come indice
8-) da_vedere=8
8-) echo "${array_img[da_vedere]}"
/home/ubunuovo/Scrivania/Pehua/sfondi_casuali/test/topolona_in_intimo.png
8-) 
Ciaux

edit: ho scritto il post mentre scrivevi il tuo ultimo
Ultima modifica di UbuNuovo il giovedì 9 marzo 2023, 17:31, modificato 1 volta in totale.
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 Arrendersi mai!!

Ma ti avevo anticipato, che ne pensi?

viewtopic.php?p=5330434#p5330434
Al di la delle impostazioni culturali :birra:
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 18 ospiti