PDA

Visualizza versione completa : Creare script per dolphin



Andy86
14-05-12, 21: 08
:bai

Sapete se c'è la possibilità di creare script personalizzati per dolphin?

Ho visto che quelli presi dalla rete vanno nella cartella ".kde/share/kde4/services/", ma contiene soltanto file .desktop, apribili sì, ma non sono veri e propri script...

Tra gli script che vorrei fare c'è ne per esempio uno che mi monti automaticamente le iso da provare in un directory pre-dedicata, del tipo:


Only registered members can view code.

Che poi dal menù contestuale della iso la passo in parametro allo script, ad esempio "azioni -> monta".

Lo so che lo script non compila, non sono molto avvezzo con il bash, ma penso si capisca cosa voglio... poi gli esperimenti li posso anche fare da solo... mi interessa sapere come aggiungerli a dolphin in modo che prendano in parametro il file.

:thx

pierino_89
14-05-12, 21: 26
Per quel lavoro lì ti consiglio AcetoneIso.
Per il resto, se hai visto che sono solo file .desktop, perché non crei un file .desktop che punti ad uno script? :eye

Andy86
14-05-12, 23: 28
AcetoneIso c'è l'ho, ma come gli altri simili devo aprirlo, puntare la iso, puntare il percorso e montare... io volevo provare a creare qualcosa di più automatico... :sisi :bgg2

La sintassi di quel file .desktop non mi sembrava quella di un semplice lanciatore... :m:


Only registered members can view code.

Comunque provo.

Allora... sembra che lo possa richiamare così:


Only registered members can view code.

Devo capire perché non funziona il mimetype per la iso, e poi dovrei essere a cavallo.

Una cosa: mi piacerebbe tanto avere un output leggibile per intercettare gli errori... suggerimenti? :m:

K.a.o.s.
14-05-12, 23: 40
Qui c'è una cosa interessante:
Mount/dismount ISO images (http://forums.opensuse.org/english/other-forums/development/programming-scripting/449605-mount-dismount-iso-images.html)

In pratica se poi fai partire lo script associando l'estensione del file, ti basta un doppio click sull'immagine disco.

Comunque io ho sempre usato mount -o loop iso :eye

Andy86
14-05-12, 23: 48
io ho sempre usato mount -o loop iso :eye

È quello che voglio usare io... ma senza doverlo riscrivere ogni volta... per questo sto cercando di fare lo script... :sisi

Comunque adesso do un occhiata a quella cosa incasinata (:bgg2) del link.

K.a.o.s.
15-05-12, 02: 34
Comunque adesso do un occhiata a quella cosa incasinata (:bgg2) del link.
Fa lo stesso lavoro di montare l'iso, ma come contorno ha il fatto che ti avverte in caso di errori e fa anche l'umount.

pierino_89
15-05-12, 17: 13
La sintassi di quel file .desktop non mi sembrava quella di un semplice lanciatore... :m:Ma sì, ha giusto qualche campo in più :tong2 guarda la documentazione magari!



Devo capire perché non funziona il mimetype per la iso, e poi dovrei essere a cavallo.
Beh, fai "file nomeiso" e guarda che mimetype ti dice :eye

Only registered members can view code.


Una cosa: mi piacerebbe tanto avere un output leggibile per intercettare gli errori... suggerimenti? :m:
Dai uno sguardo a zenity (gnome) o kdialog (kde).

Andy86
15-05-12, 21: 15
:bai

Allora, per il mimetipe avevo già trovato "x-cd-image" che va bene con tutte le immagini, comunque grazie, quel comando mi sarà utile. :sisi

Sono su kde, quindi kdialog, che tra l'altro è menzionato nello script linkato da kaos, che però non ho ancora avuto il tempo di guardare bene.

Sicuramente prima di copiare a man bassa farò esperimenti, per imparare un po' i vari comandi di bash. :sisi
... E anche per divertirmi, visto che mi piace l'informatica. :bgg2

Andy86
16-05-12, 21: 17
:bai

Non capisco perché lo script non mi permetta l'esecuzione del gksudo, ho provato anche col percorso assoluto, come nell'esempio del link, ma non me lo vede. :boh

Ho provato con il chmod +x per vedere se mi funzionava direttamente da root, ma non sortisce effetto.

K.a.o.s.
16-05-12, 21: 22
Piuttosto devi impostare il SUID. Comunque per gksudo: ho come l'impressione sia un problema di variabili d'ambiente.

pierino_89
16-05-12, 21: 34
Su kde non sarebbe meglio kdesudo? Comunque posta lo script, così possiamo pensarci su.

Andy86
16-05-12, 21: 37
:bai

Volevo dire kdesudo... comunque da lanciatore funziona.

Che sarebbe il SUID? Una regione dell'asia? :lol:

Edit:

Lo script al momento è molto "giovane", comunque è corretto, perché se lo lancio da terminale (con sudo) funziona.
Lanciandolo invece da dolphin, invece va in errore la riga col kdesudo:


Only registered members can view code.

pierino_89
16-05-12, 21: 58
Probabilmente perché kdesudo non sa quali sono opzioni sue e quali di mount. Dovresti mettere tra virgolette l'intero comando, nel dubbio.

Andy86
18-05-12, 00: 07
:bai

Allora... ho fatto delle prove da terminale, in effetti kdesudo si lamenta per i parametri non validi... mentre se metto il tutto tra virgolette s'inventa questo: ioctl: LOOP_SET_FD: Argomento non valido

So che è lui, perché con il normale sudo non lo fa. Mi chiedevo, chmod che fa esattamente? permette di dare allo script i permessi di root senza psswd o cosa? :m:

E con kdesudo non c'è qualcosa tipo il sudo -s? non dico che risolva, ma non si sa mai... :ghgh

:notte:

pierino_89
18-05-12, 00: 15
:bai

Allora... ho fatto delle prove da terminale, in effetti kdesudo si lamenta per i parametri non validi... mentre se metto il tutto tra virgolette s'inventa questo: ioctl: LOOP_SET_FD: Argomento non valido
Probabilmente adesso ci sono problemi col nome file :tong2



So che è lui, perché con il normale sudo non lo fa.

Perché sudo non accetta opzioni dopo l'argomento, mentre kdesudo sì.

Mi chiedevo, chmod che fa esattamente? permette di dare allo script i permessi di root senza psswd o cosa? :m:
Chmod cambia i permessi. Di base cambia i soliti rwx, ma ci sono anche permessi più esotici:
chmod - Wikipedia, the free encyclopedia (http://en.wikipedia.org/wiki/Chmod#Special_modes)
setuid e setgid - Wikipedia (http://it.wikipedia.org/wiki/Setuid_e_setgid)



E con kdesudo non c'è qualcosa tipo il sudo -s? non dico che risolva, ma non si sa mai... :ghgh

:notte:

E che te ne fai? :ohoh Comunque "man kdesudo" ti aiuterà sicuramente.

Andy86
18-05-12, 00: 26
Ma tu non dormi mai? http://generale.altervista.org/immagini/faccine/sbadiglio_04.gif

ci sono problemi col nome file :tong2

No, perché la stessa stringa col sudo normale va... non è più un problema di parametri. :m:

A domani. :notte:

pierino_89
18-05-12, 00: 36
Ma tu non dormi mai? http://generale.altervista.org/immagini/faccine/sbadiglio_04.gif
Verso le 3:30 :lol:


No, perché la stessa stringa col sudo normale va... non è più un problema di parametri. :m:A domani. :notte:

Stavo notando prima che kdesu (perché kdesudo non ce l'ho) usa l'opzione -c per specificare un comando con tanto di opzioni. Dai uno sguardo al man.

Andy86
18-05-12, 13: 20
kdesu (perché kdesudo non ce l'ho)

Ma... kde non è uguale per tutti? :confused:

K.a.o.s.
18-05-12, 13: 35
Ma... kde non è uguale per tutti? :confused:


Sì ma ha talmente tante opzioni di compilazione che in certe distribuzioni, come Gentoo (che pierino usa, se non mi sono perso qualcosa :lol:), dipende dall'utente. Oppure in altri casi dipende dalla distribuzione se installa o meno certi pacchetti.

Verso le 3:30 :lol:
Mi ricorda i bei tempi passati su Gentoo :lol:. Solo che durante il giorno poi ero uno zombie.

pierino_89
18-05-12, 13: 54
In realtà la questione è molto più banale: per l'elevazione dei privilegi ubuntu usa sudo e quindi ha kdesudo, debian e tutte le altre usano su e quindi hanno kdesu :oo2

Io sono sempre su Gentoo :hap

Andy86
19-05-12, 00: 00
:bai

Allora... il problema stava nell'interpretazione delle virgolette... in pratica non interpreta le virgolette dentro le virgolette... quindi ho eliminato gli spazi dalla cartella dove tengo le iso e lasciato le virgolette una volta sola, ed ora funziona.

Si può dire che già così è quel tanto che basta per montare con un click, ovvero dove volevo arrivare, poi magari mi divertirò a potenziarlo per conoscere un po' il bash e kdialog... utilizzando tanti commenti e una sintassi leggibile, ovviamente... :eye

Buona :notte:

K.a.o.s.
19-05-12, 00: 26
Allora... il problema stava nell'interpretazione delle virgolette... in pratica non interpreta le virgolette dentro le virgolette... quindi ho eliminato gli spazi dalla cartella dove tengo le iso e lasciato le virgolette una volta sola, ed ora funziona.
Spazi, caratteri speciali etc vanno preceduti da una \.
Tipo per entrare nella cartella che si chiama 12 34 (spazio in mezzo) devi dare cd 12\ 34.

Andy86
19-05-12, 13: 16
:bai

Lo so. :bgg2
Il problema è che il percorso è in una variabile, e non vale la pena di mettermi a creare un for di sostituzione automatica. :sisi

pierino_89
19-05-12, 14: 46
Devi fare solo giochi di apici per far tornare il tutto :eye

Andy86
19-05-12, 14: 54
Nel senso che devo usare l'apostrofo al posto delle virgolette innestate? :m: :ohoh

pierino_89
19-05-12, 15: 33
Scherzavo, con le virgolette non ne esci più. E nemmeno le singole ti possono aiutare, dato che le variabili al loro interno non vengono interpretate. Guarda l'opzione -c di kdesudo.

Andy86
19-05-12, 15: 46
:bai

L'opzione l'ho usata eccome, ma mi sembra non abbia cambiato nulla... cioè mi pare funzioni sia con che senza... :m:
Al massimo mi serve quando kdesudo restituisce l'errore del parametro non corretto... ma mi sembra bastino le virgolette per quello. :sisi

pierino_89
19-05-12, 16: 03
eh, però così puoi impiegare le virgolette per i parametri invece che per l'intero comando :eye

Andy86
19-05-12, 16: 52
:bai

Ma non hai appena detto che le variabili all'interno delle virgolette non vengono interpretate? :boh
Comunque ne terrò conto, :thx

pierino_89
19-05-12, 17: 18
Nelle virgolette singole tutto è letterale, in quelle doppie invece vengono interpretate.

Andy86
25-05-12, 17: 36
:bai

Non capisco come faccio a non avere il parametro "-e" settato, e quindi lo script che non esce quando trova un errore, in modo che io lo possa gestire. :confused:

"# /bin/bash" presumo sia un commento e quindi non faccia nulla... :m:

pierino_89
25-05-12, 17: 49
:bai

Non capisco come faccio a non avere il parametro "-e" settato, e quindi lo script che non esce quando trova un errore, in modo che io lo possa gestire. :confused:

"set +e", però è strano.



"# /bin/bash" presumo sia un commento e quindi non faccia nulla... :m:
Shebang (Unix) - Wikipedia, the free encyclopedia (http://en.wikipedia.org/wiki/Shebang_(Unix)) :eye

Andy86
25-05-12, 21: 41
Perché strano? :ohoh

Non so se ho capito bene... in pratica #! indica il tipo di linguaggio che sto usando? :m:
Però a me funziona anche senza... :ohoh

-------
Edit:

Il set +e non sortisce effetto... quando, ad esempio, eseguo il mount senza sudo, lo script termina sul momento e posso vedere il messaggio solo sul terminale, ma non ridirezionarlo su kdialog. :boh

pierino_89
26-05-12, 01: 25
Perché strano? :ohoh
Perché set -e se lo vuoi lo setti tu, di predefinito non c'è mai, e difatti come ti spiegherò dopo capirai che anche in questo caso è così.



Non so se ho capito bene... in pratica #! indica il tipo di linguaggio che sto usando? :m:
Però a me funziona anche senza... :ohoh

Diciamo che se lo lanci con ./nomefile userà il binario dopo ! per interpretarlo. A patto che abbia il permesso di esecuzione.
Ovviamente se lo tiri su con source o se lanci "bash nomefile" non ha alcun effetto.



Il set +e non sortisce effetto... quando, ad esempio, eseguo il mount senza sudo, lo script termina sul momento e posso vedere il messaggio solo sul terminale, ma non ridirezionarlo su kdialog. :boh
Questo è legato al fatto che ci sono due tipi di output:
1 - STDOUT - il classico output
2 - STDERR - la descrizione degli errori
Questo serve per evitare di elaborare in uno script il messaggio di errore al posto del vero output.
Se vuoi mostrare anche l'errore, puoi redirezionare STDERR su STDOUT (così hai tutto sul normale output) con "comando 2>&1 | qualcosa"
BASH Programming - Introduction HOW-TO: All about redirection (http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html)

Andy86
26-05-12, 14: 06
:thx Perfetto. :gogo

Ora posso smanettare in santa pace (:bgg2), ho anche scoperto che le virgolette innestate funzionano bene, al contrario del -c, che invece non funziona senza virgolette. :hap

Andy86
26-05-12, 17: 07
:bai

Ecco la prima versione finale del mio script:


Only registered members can view code.

Penso sia abbastanza commentato. Ho richiamato lo script da due file desktop, in modo da avere due voci menù e scegliere con cosa aprire la iso.
Ed ho anche imparato qualcosa sul bash.

:thx per l'aiuto.

Andy86
07-07-12, 15: 48
:bai

Ho realizzato uno script per eseguire l'estrazione delle immagini da un pdf con un solo click, crea una cartella con il nome del pdf nello stesso percorso del pdf e mette le immagini all'interno di essa. Bello eh? :bgg2


Only registered members can view PHP Code.

Solo non riesco a trovare un sistema di mettere un pulsante annulla insieme alla progressbar, nel caso si cambi idea. :bgg2

pierino_89
07-07-12, 15: 58
Potresti rinominarle alla fine dell'operazione, modificando il nome con sed e usando mv.
Ah, per sapere il nome di un file senza estensione basta usare "basename", senza lavorare di stringhe.
Comunque suppongo sarebbe stato più logico leggere l'output di pdfimages, piuttosto che lanciarlo una volta per pagina.
Immagino dia qualche informazione su ciò che sta facendo, dopotutto non hai idea di quante immagini ci possano essere per ogni pagina!

Andy86
07-07-12, 16: 18
Potresti rinominarle alla fine dell'operazione, modificando il nome con sed e usando mv.

Mi è venuta l'illuminazione appena dopo aver postato... :bgg2
Ma che c'entra sed? :m:


Ah, per sapere il nome di un file senza estensione basta usare "basename", senza lavorare di stringhe.


Ho provato basename da terminale, sembra che non funzioni, cioè ritorna esattamente quello che scrivo, come echo. :boh


Immagino dia qualche informazione su ciò che sta facendo, dopotutto non hai idea di quante immagini ci possano essere per ogni pagina!

A questa eventualità non ho pensato, ero partito a pensare lo script per dei file .pdf di fumetti, con appunto una "pagina" per pagina.
Comunque non da alcun output, rimane in attesa fino al termine dell'operazione e poi esce e passa alle istruzioni successive, impedendo di incrementare la barra contemporaneamente.

pierino_89
07-07-12, 16: 47
Mi è venuta l'illuminazione appena dopo aver postato... :bgg2
Ma che c'entra sed? :m:
Eh, non per forza sed, ma qualcosa dovrai pur usare per cambiare il nome :tong2



Ho provato basename da terminale, sembra che non funzioni, cioè ritorna esattamente quello che scrivo, come echo. :boh

MAN basename:
SYNOPSIS
basename NAME [SUFFIX]
basename OPTION... NAME...


DESCRIPTION
Print NAME with any leading directory components removed. If specified, also remove a trailing SUFFIX.



A questa eventualità non ho pensato, ero partito a pensare lo script per dei file .pdf di fumetti, con appunto una "pagina" per pagina.
Comunque non da alcun output, rimane in attesa fino al termine dell'operazione e poi esce e passa alle istruzioni successive, impedendo di incrementare la barra contemporaneamente.
Uff, allora non si può fare. In compenso potresti rendere multiprocesso il tutto per fare più in fretta.

Andy86
07-07-12, 16: 58
basename NAME [SUFFIX]

Ah, ok. Pensavo facesse tutto da solo. :bgg2
Comunque meglio il --help, dice molta più roba. :sisi


In compenso potresti rendere multiprocesso il tutto per fare più in fretta.

Temo che sia meno complicato così... tanto funziona. :bgg2

pierino_89
07-07-12, 17: 08
Ah, ok. Pensavo facesse tutto da solo. :bgg2
Comunque meglio il --help, dice molta più roba. :sisi
Man è più completo per definizione, ovviamente io non l'ho incollato tutto :eye



Temo che sia meno complicato così... tanto funziona. :bgg2Sicuramente è meno complicato... Però se ti capitasse un pdf da 300 MB potrebbe essere una buona idea sfruttare il multiprocessore.

Andy86
08-07-12, 21: 36
:bai

Scusa, ma sei sicuro che il multithreading c'è in bash? :ohoh
Ho cercato un po', ma ho trovato solo un certo "coproc" che dovrebbe creare un timer, ma non capisco se è appunto multiprocess o no. :boh

pierino_89
08-07-12, 22: 10
Non puoi creare thread, però se tu lanci un processo in background è sostanzialmente la stessa cosa.
Ti incollo un pezzo di script che ho usato per fare un lavoro simile al tuo (solo che io dovevo estrarre immagini da altre immagini... un delirio):


Only registered members can view code.
Sostanzialmente io ho una serie di cartelle numerate (da $start a $end), e per ciascuna di esse voglio lanciare il comando "impaccathread.sh" con la cartella stessa come argomento ed eventuali opzioni ($threadopts). Ovviamente dato che lancio questa operazione in background e dato che ci vanno circa 3 minuti per completarla, non voglio che ce ne siano più di $FORK attive contemporaneamente (sennò mi si piega a metà il pc).
Per questo motivo uso il job control di bash: quando lancio un comando con "&" al fondo, viene eseguito in background e posso vederne lo stato con il comando "jobs". Contando le righe di "jobs" so quanti processi sono ancora attivi.
Ogni mezzo secondo controllo se c'è un posto libero ed eventualmente ne lancio un'altro.

Andy86
08-07-12, 22: 21
Quindi se io lancio un comando che impiega un po' di tempo in background, nel frattempo posso far proseguire lo script e riempire la progressbar finché il comando non termina, giusto? :m:

pierino_89
08-07-12, 22: 43
Esatto. Il job control di bash di permette sostanzialmente di fare 3 cose:
- mettere in pausa un job (CTRL-Z)
- riprendere un job
- mandare in background un job (e riportarlo eventualmente in foreground)

Andy86
10-07-12, 21: 11
:bai

Ho notato che passando al kdialog il valore 0 come steps viene creata un progressbar generica, e così ho fatto, terminandola dopo l'esecuzione del comando, almeno ho risparmiato di dover processare tutto l'output di jobs. :ghgh

Tanto non sapendo a priori quanto tempo ci impiega il comando, anche contando il numero di file da processare, non penso avrei potuto fare di meglio. :ghgh

Adesso non mi resta (ciliegina sulla torta) che richiamare i due script in uno finale che crei direttamente il .cbz (file .zip con estensione modificata). :sisi

pierino_89
10-07-12, 21: 29
:bai

Ho notato che passando al kdialog il valore 0 come steps viene creata un progressbar generica, e così ho fatto, terminandola dopo l'esecuzione del comando, almeno ho risparmiato di dover processare tutto l'output di jobs. :ghgh

Uhm, non ho capito cosa intendi.



Tanto non sapendo a priori quanto tempo ci impiega il comando, anche contando il numero di file da processare, non penso avrei potuto fare di meglio. :ghgh

Beh, teoricamente sommi il numero totale di pagine e per ogni pagina fai avanzare in percentuale. Più di così non si può fare.



Adesso non mi resta (ciliegina sulla torta) che richiamare i due script in uno finale che crei direttamente il .cbz (file .zip con estensione modificata). :sisi
Credo che ti tornerà utile il comando wait: attende che tutti i job siano terminati prima di uscire.

Andy86
10-07-12, 22: 03
Parlo di questa:

http://upload.wikimedia.org/wikipedia/it/a/ae/Kdialog2.png

Senza percentuale, va avanti e indietro da sola.
Comando: `kdialog --progressbar "messaggio" 0`


teoricamente sommi il numero totale di pagine e per ogni pagina fai avanzare in percentuale.

In realtà parlavo di un secondo script che si occupa di ridimensionare le immagini precedentemente estratte tramite mogrify.
Questo in realtà è niente più che il semplice comando da terminale, solo che l'ho messo nel menù azioni di nautilus, così da non doverlo richiamare a mano ogni volta (lo so, sono uno scansafatiche... :ghgh) e già che c'ero ho messo una mini gui in kdialog per la scelta dei pixel...

Potendo eseguirlo facilmente su un file per volta avrei adottato il sistema precedente del while che chiamata aggiorna la barra, ma perché complicarsi la vita? (lo chiedo (retoricamente) a me per primo, perché alla fine esagero sempre... ).


Credo che ti tornerà utile il comando wait

In realtà avevo intenzione di richiamarli uno per volta, visto che uno girerebbe sul risultato dell'altro. :tong2

pierino_89
10-07-12, 22: 28
Parlo di questa:

http://upload.wikimedia.org/wikipedia/it/a/ae/Kdialog2.png

Senza percentuale, va avanti e indietro da sola.
Comando: `kdialog --progressbar "messaggio" 0`

Ah, ok. Però non dà alcuna informazione sull'avanzamento così!



In realtà parlavo di un secondo script che si occupa di ridimensionare le immagini precedentemente estratte tramite mogrify.
Questo in realtà è niente più che il semplice comando da terminale, solo che l'ho messo nel menù azioni di nautilus, così da non doverlo richiamare a mano ogni volta (lo so, sono uno scansafatiche... :ghgh) e già che c'ero ho messo una mini gui in kdialog per la scelta dei pixel...

Figurati, io pure ho un plugin per quella cosa lì... se non erro è kipi-plugins.



Potendo eseguirlo facilmente su un file per volta avrei adottato il sistema precedente del while che chiamata aggiorna la barra, ma perché complicarsi la vita? (lo chiedo (retoricamente) a me per primo, perché alla fine esagero sempre... ).


In realtà avevo intenzione di richiamarli uno per volta, visto che uno girerebbe sul risultato dell'altro. :tong2
Beh ma tutto il mio discorso avrebbe senso lanciando il job in background... Lanci uno script per ogni pagina che:
- estragga le immagini
- ridimensioni le immagini estratte da quella pagina
- incrementi di 1 la barra
Una volta lanciati tutti quanti, aspetti con wait che escano tutti e poi impacchi il tutto.

Ovviamente se fai il tutto in due soli passaggi ti eviti la gestione dei jobs. È più lento e non hai informazioni riguardo l'andamento, ma anche estremamente più semplice da scrivere.

Andy86
10-07-12, 22: 44
:bai

L'idea mi tenta, ma non so se ho l'esperienza necessaria.

Più che altro perché non ho capito come chiamare il mogrify su un file solo, figurati su quelli non processati, e non parliamo di processare l'output di ls, non me la caverei più. :ghgh

Mi viene in mente che potrei applicare estraendo di volta in volta i file in una cartella temp e poi muoverli nella principale (dalla quale creerò lo zip) e poi alla fine cancellare la temp. :m: :ohoh

pierino_89
10-07-12, 23: 08
:bai
L'idea mi tenta, ma non so se ho l'esperienza necessaria.
Inizia a farlo funzionare, poi se ti annoi ci pensi :ghgh



Più che altro perché non ho capito come chiamare il mogrify su un file solo
E che c'è di difficile? Invece di passargli come primo argomento un generico "*.jpg" (o quel che è) gli specifichi il nome file.
Anche se per un solo file sarebbe più corretto usare "convert".



figurati su quelli non processati, e non parliamo di processare l'output di ls, non me la caverei più. :ghgh

L'output di ls è la cosa più facile del mondo da gestire, basta usare lo switch -1 :bgg2



Mi viene in mente che potrei applicare estraendo di volta in volta i file in una cartella temp e poi muoverli nella principale (dalla quale creerò lo zip) e poi alla fine cancellare la temp. :m: :ohoh
Sì, la via dovrebbe essere quella. Li estrai in una cartella temporanea e mentre li converti li sposti (ed eventualmente rinomini) nella cartella principale.

Andy86
10-07-12, 23: 27
E che c'è di difficile?

Mi sono espresso male, il problema è proprio quello di processare l'output di ls per avere il nome del file sul quale chiamare il mogrify o convert che sia.

Ora pensandoci se lo faccio durante l'estrazione è più facile perché posso ancora richiamare la variabile con il numero pagina e comporre il nome. :m:

Tra l'altro la recensione di mogrify che ho trovato neanche lo passava il "*.jpg". :ghgh


basta usare lo switch -1 :bgg2

Questa non l'ho proprio capita... :ehmm


Sì, la via dovrebbe essere quella.

Però se faccio come dici te che lancio più job contemporaneamente poi mi serviranno millemila cartelle temporanee... :ghgh
In effetti ci sono certi programmi che se la numerano... :m:



Inizia a farlo funzionare, poi se ti annoi ci pensi :ghgh


Lo farò. Per adesso... :notte:

pierino_89
11-07-12, 00: 00
Mi sono espresso male, il problema è proprio quello di processare l'output di ls per avere il nome del file sul quale chiamare il mogrify o convert che sia.

Ora pensandoci se lo faccio durante l'estrazione è più facile perché posso ancora richiamare la variabile con il numero pagina e comporre il nome. :m:
La cosa più veloce mi sembra estrarle in una cartella a parte (così sei sicuro che ci siano solo quelle) e processarle lì.
Altrimenti ti tocca controllare il mimetype di ogni file per vedere quale è un'immagine e quale no. Che non è sta gran cosa, però è più noioso, devi fare una cosa tipo:

Only registered members can view code.
al posto di:

Only registered members can view code.



Tra l'altro la recensione di mogrify che ho trovato neanche lo passava il "*.jpg". :ghgh
"Mogrify" è una versione di "convert" che fa le modifiche in place se possibile, o comunque non necessita che gli sia specificato un file di destinazione. Di fatto puoi passargli qualsiasi path ad un qualsiasi numero di file e si arrangia lui. :oo2


Questa non l'ho proprio capita... :ehmm
Con l'output riga per riga è molto più semplice usare un while, ma non era quello il tuo problema. :eye




Però se faccio come dici te che lancio più job contemporaneamente poi mi serviranno millemila cartelle temporanee... :ghgh
In effetti ci sono certi programmi che se la numerano... :m:

Beh, non penso sia un problema... Se proprio non ti piace, puoi farne una per ogni job contemporaneo e riutilizzarle. Comunque sia, alla fine del job le cancelli, e anche se non lo fai basta crearle in /tmp, così al primo riavvio spariscono. Anche se non è buona educazione lasciare avanzi in giro...
Guarda il comando mktemp per approfondire.



Lo farò. Per adesso... :notte:
Ma come fai ad aver già sonno :tong2... Buona notte!

Andy86
11-07-12, 21: 09
Ma come fai ad aver già sonno :tong2... Buona notte!

È che stamattina dovevo svegliarmi presto... e se non dormo almeno 8/9 ore a notte poi crollo... :lol:


Con l'output riga per riga è molto più semplice usare un while

A parte che avevi scritto switch e non si capiva che -1 era per ls... :lol:


Beh, non penso sia un problema...

Ok... ci smanetto un po' e poi vedo cosa ci esce. :sisi

pierino_89
12-07-12, 00: 14
È che stamattina dovevo svegliarmi presto... e se non dormo almeno 8/9 ore a notte poi crollo... :lol:

E anche tu hai ragione :bgg2


A parte che avevi scritto switch e non si capiva che -1 era per ls... :lol:

Ah, intendevo switch nel senso di opzione di ls :tong2




Ok... ci smanetto un po' e poi vedo cosa ci esce. :sisi
Dai, facci poi sapere cosa viene fuori.

Andy86
12-07-12, 14: 22
:bai

Stavo pensando una cosa... se dal comando job ottengo solo il numero dei job non c'è il rischio che conteggi anche altri job esterni allo script e sballi tutto il calcolo? :m:

pierino_89
12-07-12, 17: 03
:bai

Stavo pensando una cosa... se dal comando job ottengo solo il numero dei job non c'è il rischio che conteggi anche altri job esterni allo script e sballi tutto il calcolo? :m:
Il numero dei jobs è limitato allo scope del processo corrente (ovvero vengono mostrati solo i processi della bash in uso)

Andy86
12-07-12, 21: 39
:bai

Ok. Ma per sfruttare i jobs dovrei fare che ne eseguo uno per core, quindi due per volta, giusto? :ohoh
Cioè, nel senso, se li butto su tutti insieme in velocità ci guadagno lo stesso? :m:

pierino_89
12-07-12, 21: 45
Il numero di jobs da far eseguire contemporaneamente dipende dal peso del job e dal numero di processori, in linea di massima 1 o 2 per core non è una cattiva scelta. Se poi vedi che l'utilizzo del processore è scarso puoi provare ad aumentarlo. Aiutati con "time" per vedere qual'è il valore migliore.

Andy86
28-07-12, 18: 22
:bai

Mi sono messo all'opera, ed ecco un prima versione senza la multi elaborazione:


Only registered members can view code.

Il time mi pare accettabile:

real 1m45.082s
user 0m58.072s
sys 0m20.025s

Ora in teoria va bene anche così, dal punto che non mi obbliga ad aspettare guardandolo e se non ho capito male grazie allo scope locale posso lanciarne più di uno contemporaneamente. :bgg2

Però c'è un dubbio che mi assale, lo scope locale vale anche per le singole funzioni?
Se dovessi lanciare la funzione con &, non correrei il rischio di accavallare i vari CD e lavorare nel percorso sbagliato?

pierino_89
29-07-12, 02: 49
:bai
Il time mi pare accettabile:

real 1m45.082s
user 0m58.072s
sys 0m20.025s

Beh, dipende dal pdf :eye



Ora in teoria va bene anche così, dal punto che non mi obbliga ad aspettare guardandolo e se non ho capito male grazie allo scope locale posso lanciarne più di uno contemporaneamente. :bgg2

Non dovrebbe esserci alcun problema. Non è neanche una questione di scope, sono proprio processi diversi che non si parlano fra loro.



Però c'è un dubbio che mi assale, lo scope locale vale anche per le singole funzioni?
Se dovessi lanciare la funzione con &, non correrei il rischio di accavallare i vari CD e lavorare nel percorso sbagliato?
Onestamente con la funzione non lo so, a me veniva scomodo e ho spostato ciò che riguardava il processo figlio in un altro file per comodità. In ogni caso, bash vede solo le variabili esportate dal processo padre, quindi in teoria se non dai "export variabile=valore" i processi figli non possono accederci.

Andy86
29-07-12, 12: 00
Beh, dipende dal pdf :eye

55 mb. A parte qualche piccola eccezione sono tutti più o meno così. :sisi


a me veniva scomodo e ho spostato ciò che riguardava il processo figlio in un altro file per comodità.

A me invece mi pareva scomodo lavorare su "classi" per una cosa così piccola... :bgg2
Mi toccherà andare per tentativi. :hap

pierino_89
29-07-12, 23: 29
Ah, ora ricordo! Forse l'avevo spezzato perché usato come funzione non appariva nell'elenco dei jobs e mi toccava inventarmi un altro tipo di contatore.

Andy86
02-08-12, 23: 35
:bai

Comunque stavo pensando di usare i jobs per processare più file pdf completamente, ma non so se sia possibile, perché dolphin lancia uno script per ogni file selezionato, non li passa tutti insieme. Mi sa che bisognerebbe lavorare su una specie di parentlock. :m:

E poi siccome in queste cose (ma solo in queste cose però) sono precisino, mi interessava raggruppare le progressbar in un unica finestra (tipo la finestra degli aggiornamenti)... ma non ho trovato nessun sistema, mi sa che non è proprio possibile... :triste

pierino_89
03-08-12, 00: 35
Teoricamente dovrebbe essere possibile, perché kim funziona così... Poi come si faccia non lo so :tong2

[edit]
teoricamente potresti lasciare lo script in ascolto su una socket (o anche un file pipe), così se viene rilanciato il nuovo script segnala al precedente e poi esce. Però penso diventi veramente un macello da gestire.

Andy86
03-08-12, 11: 26
:bai

E cos'è kim? :m:

pierino_89
03-08-12, 13: 37
Kim (Kde Image Menu) KDE-Apps.org (http://kde-apps.org/content/show.php?content=11505) :eye

Andy86
03-08-12, 17: 48
:bai

Sai dirmi niente a proposito di questo?

KDE - Kommander - Dynamic Dialog Editor (http://www.kde.org/applications/development/kommander/)

Il man non c'è, e il --help ha solo due opzioni disponibili. :m: :ohoh

pierino_89
04-08-12, 05: 26
Onestamente non l'ho mai sentito nominare. Però ho paura che tu ti vada a impantanare, il bash scripting in generale non si presta a chissà quali virtuosismi di grafica. Poi tutto si può fare, però valuta se non convenga usare direttamente un linguaggio più consono :eye

Andy86
04-08-12, 11: 43
:bai

In effetti mi era passata per la testa l'idea di mettere giù qualcosa in java, però poi ho pensato fosse un casino (sempre che fosse possibile) chiamare da java uno script bash (che mi serve per chiamare i programmi del terminale, che non posso certo riscrivermi da zero). :sisi

Al momento comunque mi stavo concentrando su una versione per passare da .rar a .zip, ma non capisco perché il convert non trova il file. :boh


Only registered members can view PHP Code.

Ho provato anche a passare il percorso assoluto, ma non trova il file, eppure il nome è giusto, e se lo faccio da terminale il singolo comando funziona, (mentre lo script no... :boh)
Ho messo un po' di kdialog con pwd, e il 'cd' viene eseguito correttamente. :boh

------------------------------
Edit:

A mente fresca mi sono accorto che il problema è di unrar che non estrae i file subito, devo capire perché, ma a causa di quel while lì lo fà alla fine quando passa il nome del rar in nome_file, perciò alla fine li vedevo nella cartella e pensavo si bloccasse sul convert. :boh

pierino_89
04-08-12, 14: 04
A dire il vero non capisco il tuo script. Non era più logico estrarre l'intero archivio in un colpo, usare mogrify e ri-zipparlo?

Andy86
04-08-12, 14: 17
A dire il vero stavo seguendo il tuo pattern per avere la progress bar che si aggiorna ad ogni immagine. :tong2 :bgg2

Comunque ho individuato il problema. Unrar vuole il percorso completo come parametro di N, e all'interno dei rar c'è una cartella che contiene i file, dovrò trovare il modo di ottenere il nome della cartella da LB. :m:

pierino_89
04-08-12, 14: 38
Ah, dimentico sempre la progress bar :bgg2
Potresti estrarre di botto i file ed elaborarli uno ad uno, invece di estrarli uno per volta.

Andy86
04-08-12, 14: 50
Ma se poi capita un file .rar un po' grosso non è che mi aspetta troppo sullo 0% e sembra bloccato? :bgg2
Tengo l'idea come riserva, ma prima voglio provare a sistemare quel problema della cartella... possibile che unrar non può fare la lista nuda, ma coi percorsi completi? :m:

Edit:

Fatto. Bastava ottenere l'elenco con vb invece che lb, e poi passare a convert con il basename. :sisi+


Only registered members can view PHP Code.

Il bello dell'informatica è che ci sono tante soluzioni e che ti devi ingegnare per trovare quella più consona. :sisi

Andy86
08-08-12, 20: 52
:bai

pdf_to_cbz -> patch 1.1

fix1: la cartella temp ora viene correttamente eliminata.
fix2: i cbz sono ora compatibili con il lettore cbz per symbian.


Only registered members can view PHP Code.

pierino_89
09-08-12, 01: 06
Bravo! Come terzo fix ti direi di creare le cartelle temporanee con mktemp. Altrimenti se uno lo facesse due volte succederebbero brutte cose :eye
Inoltre mktemp crea in /tmp, così anche se si pianta l'affare non lascia sporcizia in giro (e al riavvio viene cancellato tutto)

Andy86
10-09-12, 17: 36
:bai

Mi è balenata un'idea alternativa al kdialog: personalizzare una finestra di terminale in modo da creare un "monitor" per lo script. :bgg2

L'idea mi è venuta pensando a quei programmi che mostrano la percentuale di completamento aggiornando sempre la stessa riga del terminale e a quelle applicazioni (tipo nano) che si "compongono" nel terminale. :sisi

Ho cercato un po' per capire se la cosa fosse alla portata delle mie capacità e ho trovato questo -> UnderAttHack n.9 :: Italian Hacking e-zine by Hackingeasy Team (http://underatthack.org/download/num_9/num_9.html#sha-bang_for_fun), che mi pare faccia proprio al caso mio. :hap

C'è solo un problema: non riesco a capire come eseguire del codice in una finestra da terminale lanciata dallo script stesso quando ci clicco sopra... :ohoh

Forse sono stordito io, ma aprendo la finestra con "konsole" non riesco a dargli in parametro proprio nulla... ne' prima ne' dopo. :wall

:thx

pierino_89
10-09-12, 18: 10
Help ti aiuta :tong2

konsole --helpUso: konsole [opzioni Qt] [opzioni KDE] [opzioni] [args]


Emulatore di terminale


Opzioni generiche:
--help Mostra la guida sulle opzioni
--help-qt Mostra le opzioni specifiche per Qt
--help-kde Mostra le opzioni specifiche per KDE
--help-all Mostra tutte le opzioni
--author Mostra le informazioni sull'autore
-v, --version Mostra le informazioni sulla versione
--license Mostra le informazioni sulla licenza
-- Fine delle opzioni


Opzioni:
--profile <name> Nome del profilo da usare per una nuova istanza di Konsole
--workdir <dir> Imposta la cartella di lavoro iniziale della nuova scheda o finestra a «dir»
--hold, --noclose Non chiudere automaticamente la sessione iniziale quando finisce.
--new-tab Crea una nuova scheda in una finestra esistente invece di creare una nuova finestra
--tabs-from-file <file> Crea schede come specificate nel dato file di configurazione delle schede
--background-mode Avvia Konsole sullo sfondo e portala in primo piano quando si preme Ctrl+Shift+F12 (combinazione predefinita)
--show-menubar Mostra la barra dei menu, ignorando l'impostazione predefinita
--hide-menubar Nascondi la barra dei menu, ignorando l'impostazione predefinita
--show-tabbar Mostra la barra delle linguette, ignorando l'impostazione predefinita
--hide-tabbar Nascondi la barra delle linguette, ignorando l'impostazione predefinita
--notransparency Disabilita gli sfondi trasparenti, anche se il mio sistema li supporta.
--list-profiles Elenco dei profili disponibili
--list-profile-properties Elenca tutti i nomi delle proprietà dei profili e il loro tipo (da usare con -p)
-p <property=value> Cambia il valore di una proprietà di profilo.
-e <cmd> Comando da eseguire. Questa opzione catturerà tutti gli argomenti seguenti, quindi usala per ultima.


Argomenti:
args Argomenti passati al comando


Usa --nofork per eseguire in primo piano (utile con l'opzione -e).

Andy86
10-09-12, 23: 24
:bai

Non è che sai se è anche possibile passare in parametro anche una funzione in modo da passare al terminale un gran numero di istruzioni o anche avere un reference in modo da poterlo controllare nel corso dello script?


Only registered members can view code.

In sostanza quello che vorrei è eseguire lo script dal terminale ma decidendo io quali messaggi riportare e dove, come un applicazione per il terminale.

Certo non posso risolvere tutto con il clear o mettermi a completare tutto con robe tipo 1>&null... :ohoh

Ma forse mi sto perdendo in un bicchiere d'acqua... è meglio che ci penso domani a mente fresca. :sisi

pierino_89
10-09-12, 23: 34
:bai

Non è che sai se è anche possibile passare in parametro anche una funzione in modo da passare al terminale un gran numero di istruzioni o anche avere un reference in modo da poterlo controllare nel corso dello script?

Certo, lanci un altro script :ghgh



In sostanza quello che vorrei è eseguire lo script dal terminale ma decidendo io quali messaggi riportare e dove, come un applicazione per il terminale.

Certo non posso risolvere tutto con il clear o mettermi a completare tutto con robe tipo 1>&null... :ohoh

Ma forse mi sto perdendo in un bicchiere d'acqua... è meglio che ci penso domani a mente fresca. :sisi
Puoi fare una fifo e lanciare sul terminale uno script che stampi tutto quel che viene buttato lì dentro, per farla semplice.

Andy86
11-09-12, 00: 00
Nel senso che posso lavorare a classi chiamando funzioni degli script già in esecuzione? :ohoh

Forse è meglio che vado a letto... :notte:

pierino_89
11-09-12, 00: 07
No, quello non puoi farlo, intendevo passare uno script come parametro a konsole.

Andy86
14-09-12, 16: 42
:bai

Allora, vediamo se ho capito.

Avvio konsole con & ed uno script che legge ad infinutum (while true) da una fifo i parametri per tput e da una seconda fifo i parametri per echo.

Procedo con lo script principale utilizzando le fifo come "set" per il secondo script.

Dunque i comandi che mi servono sarebbero:

$fifo1=`mktemp fifoX`
mkfifo "$fifoX"
echo > "$fifoX"
tput `cat "$fifoX"`
echo `cat "$fifoX"`

Tutto corretto?

pierino_89
14-09-12, 17: 05
Che roba è tput?

Andy86
14-09-12, 17: 19
Quello per impostare la posizione del cursore nel terminale, come dalla guida linkata al #78 (http://www.collectiontricks.it/forum/gnu-linux/Ct4378-creare-script-per-dolphin/index2.html#post135867).

pierino_89
14-09-12, 17: 24
Uh, non avevo letto.
Comunque allora sì, a parte il fatto che le fifo le devi creare nello script padre e leggerle dallo script che gira su konsole.

Andy86
14-09-12, 17: 32
Perché, non è quello che ho detto? :ohoh

pierino_89
14-09-12, 19: 06
Beh, accodandoli tutti sembrava che volessi lanciarli in un solo script :eye

Andy86
14-09-12, 19: 17
Ah... l'avevo scritto prima l'ordine d'esecuzione... poi ho messo i comandi in forma di elenco senza il tag code apposta, proprio perché lo intendevo come elenco dei comandi di cui volevo avere conferma.

Altra cosa, per ridirezionare eventuali output di tput ed echo nel vuoto era "1>/dev/null"? Mi sembrava che ci dovesse andare un & da qualche parte... :m:

pierino_89
14-09-12, 19: 58
Tu vuoi redirigere lo stderr, ovvero il file descriptor 2. Dunque "2>/dev/null". L'1 è lo standard output, quindi non apparirebbe nulla a schermo (> e 1> sono sinonimi).
"&" lo usi quando stai redirigendo su un fd e non su un file. Es. 2>&1 redirige lo stderr su stdout. Si usa spesso in combo "2>&1 >/dev/null" per far sparire completamente l'output :oo2

Andy86
14-09-12, 20: 11
Il combo è proprio quello che mi serve per essere sicuro di non sporcare il disegno. :sisi

ps: bella cosa i pipe, posso quasi lavorare ad oggetti. :sisi

EDIT: Perché mktemp non crea i file automaticamente in /tmp???

pierino_89
14-09-12, 20: 49
Il combo è proprio quello che mi serve per essere sicuro di non sporcare il disegno. :sisi
C'era anche una cosa tipo 2&>/dev/null però puoi farla solo con bash.



ps: bella cosa i pipe, posso quasi lavorare ad oggetti. :sisi
Ehh addirittura :tong2 però sono parecchio comode per far parlare processi fra loro senza scomodare il tcp/ip e senza usare file temporanei.



EDIT: Perché mktemp non crea i file automaticamente in /tmp???
Beh, prima di tutto perché potresti volerli in /var/tmp, secondo perché sarebbe parecchio riduttivo, uno magari ha una cartella temporanea nella home per interrompere e riprendere in seguito il processo :eye

Andy86
14-09-12, 21: 55
Ehh addirittura :tong2

Paragone esagerato, lo so. Intendevo che così ogni job che lancio può comunicare una sua variabile locale (uguale per tutti i job duplicati) allo script madre. :sisi




prima di tutto perché potresti volerli in /var/tmp, secondo perché sarebbe parecchio riduttivo

Fortunatamente /tmp non è root, o per lo meno mktmp non richiede sudo. :hap

pierino_89
14-09-12, 22: 42
Fortunatamente /tmp non è root, o per lo meno mktmp non richiede sudo. :hap
Tutte le tmp sono di root, ma sono scrivibili da cani e porci :ghgh la differenza fra /tmp e /var/tmp è che /tmp per definizione viene ripulita ad ogni riavvio, mentre da /var/tmp ci si aspetta che il contenuto sopravviva ad un reboot (ma ci sono pareri discordanti riguardo a come/quando debba essere ripulita).

Andy86
14-09-12, 22: 53
Tutte le tmp sono di root, ma sono scrivibili da cani e porci :ghgh

Assai poco logico... :m:

pierino_89
15-09-12, 00: 09
Assai poco logico... :m:
Certo che è logico, se così non fosse nessuno potrebbe creare file temporanei :tong2
Ovviamente i file e le cartelle all'interno hanno i permessi e il proprietario stabiliti dal processo che li crea.

Andy86
15-09-12, 00: 19
E allora non è logico che sia di root. :tong2

ps: comunque l'oop di java mi manca lo stesso. :sisi

:notte:

pierino_89
15-09-12, 00: 30
E allora non è logico che sia di root. :tong2
E di chi dovrebbe essere allora? :oo2



ps: comunque l'oop di java mi manca lo stesso. :sisi

:notte:
Beh bash serve giusto per aiutarti a sveltire quelle quattro cose che devi fare una volta o poco più, per le altre cose esistono linguaggi più completi :sisi

Andy86
15-09-12, 00: 50
E di chi dovrebbe essere allora? :oo2

Ah, si. Stavo unificando i permessi di modifica con quelli di eliminazione. :ghgh


Beh bash serve giusto per aiutarti a sveltire quelle quattro cose che devi fare una volta o poco più

Hai perfettamente ragione. È che non mi piacciono le cose che non mostrano niente, perché non so se stanno funzionando. Infatti alla base dell'idea c'era quella di eseguire semplicemente lo script nel terminale in automatico, senza fronzoli, ma poi con queste cose mi diverto ed esagero sempre. :ehmm

Magari mi darò al Runtime.exec()... :lol: (scriverò cento volte "devo stare sul semplice").

Comunque passare lo script con il parametro -e non funziona, non lo trova e avvia bin/bash al suo posto. :boh
Però a quest'ora magari mi perdo in un bicchier d'acqua, quindi ci penso domani. :notte:

Andy86
24-11-12, 01: 14
:bai

Che ne dici di questo sistema più veloce per avere un "monitor" dello script?
Forse è quello che mi ronzava nella testa già da tempo, ma poi chissà perché mi sono messo in testa parametri e doppi script.
Tra l'altro mi sono ispirato al funzionamento del "paint" di java. :ghgh


Only registered members can view code.

Questo è un abbozzo che disegna lo schermo aggiornando i numeri, ma funziona bene.

L'unico problema è che speravo di poter avviare il terminale insieme allo script attraverso il "konsole -e", invece mi da questo:


Only registered members can view code.

Ci capisci qualcosa? :m: :boh

pierino_89
24-11-12, 01: 49
:bai

Che ne dici di questo sistema più veloce per avere un "monitor" dello script?
Forse è quello che mi ronzava nella testa già da tempo, ma poi chissà perché mi sono messo in testa parametri e doppi script.
Tra l'altro mi sono ispirato al funzionamento del "paint" di java. :ghgh

Non conosco java, quindi non posso fare il paragone, comunque c'è una cosa che assolutamente non va bene: lo sleep :tong2 ricordati di toglierlo quando implementi il vero programma.
Per il resto mi pare buono, ti suggerisco solo di usare let per incrementare il contatore, e potresti anche passare il progress come parametro alla funzione. Inoltre potresti riscrivere gli if usando [ -gt ] e [ -lt ], ma sono finezze. Bel lavoro :oo2


L'unico problema è che speravo di poter avviare il terminale insieme allo script attraverso il "konsole -e", invece mi da questo:


Only registered members can view code.

Ci capisci qualcosa? :m: :boh
Dovrei vedere il codice che hai usato per lanciare tutto l'aggeggio, così è difficile fare supposizioni :eye

Andy86
24-11-12, 12: 55
:bai


comunque c'è una cosa che assolutamente non va bene: lo sleep :tong2

Lo so, l'ho messo proprio perché non c'è alcun comando ed avevo bisogno di simulare la velocità di esecuzione, altrimenti andava talmente veloce che sfarfallava tutto. :sisi


e potresti anche passare il progress come parametro alla funzione

Beh, questo è quello che ho imparato con java, impostare/elaborare/modificare/aggiornare la situazione tramite uno step e poi ridisegnarla a schermo.
Dovessi passare tutte le variabili come parametro (oltre a rendere il codice meno leggibile) non avrei la possibilità di aggiornare una sola variabile, ma dovrei passare sempre tutti i valori.
Così invece basta che modifico solo quello che serve ed il resto rimane uguale. IMHO. :sisi


Inoltre potresti riscrivere gli if usando [ -gt ] e [ -lt ], ma sono finezze

Beh, suppongo che sia questione di gusti. Io ho scelto quella scrittura perché non riuscivo a ricordarmi tutte quelle paroline, e poi così è quasi uguale alla scrittura che si usa in java e non faccio confusione. :sisi


Dovrei vedere il codice che hai usato per lanciare tutto l'aggeggio

Semplicemente
Only registered members can view code. oppure anche con il path completo, ma il risultato è sempre quello. :boh

Ho visto che su qualche forum usano il $SHELL per chiamare gli script, ma non ho capito se c'entra con quello che voglio fare io:


Only registered members can view code.

:m:

pierino_89
24-11-12, 13: 40
Beh, questo è quello che ho imparato con java, impostare/elaborare/modificare/aggiornare la situazione tramite uno step e poi ridisegnarla a schermo.
Dovessi passare tutte le variabili come parametro (oltre a rendere il codice meno leggibile) non avrei la possibilità di aggiornare una sola variabile, ma dovrei passare sempre tutti i valori.
Così invece basta che modifico solo quello che serve ed il resto rimane uguale. IMHO. :sisi

Beh, passi i parametri uguali e ottieni un risultato uguale, tanto ridisegni tutto comunque :tong2 era solo perché non mi piace usare variabili globali.



Beh, suppongo che sia questione di gusti. Io ho scelto quella scrittura perché non riuscivo a ricordarmi tutte quelle paroline, e poi così è quasi uguale alla scrittura che si usa in java e non faccio confusione. :sisi

In realtà è questione di compatibilità, la tua sintassi è compatibile solo con bash, mentre quella con le quadre singole è universale. Inoltre le parentesi tonde penso siano più lente (a un livello non percepibile umanamente) perché permettono di eseguire operazioni molto più complesse.



Semplicemente
Only registered members can view code. oppure anche con il path completo, ma il risultato è sempre quello. :boh


Prova a non mettere le virgolette.



Ho visto che su qualche forum usano il $SHELL per chiamare gli script, ma non ho capito se c'entra con quello che voglio fare io:


Only registered members can view code.

:m:
No, perché $SHELL contiene "/bin/bash" :ghgh

Andy86
24-11-12, 13: 58
era solo perché non mi piace usare variabili globali.

Mi pare di aver letto da qualche parte che si possono dichiarare con il "local" davanti. :m:


Prova a non mettere le virgolette.

Già provato, dice che non trova lo script (come se il file non esistesse) e avvia il /bin/bash al suo posto.

Che il mio problema centri con questo bug? -> https://bugs.kde.org/show_bug.cgi?id=170867

pierino_89
24-11-12, 14: 10
Mi pare di aver letto da qualche parte che si possono dichiarare con il "local" davanti. :m:

Sì, ma poi non le vede la funzione :ghgh



Già provato, dice che non trova lo script (come se il file non esistesse) e avvia il /bin/bash al suo posto.

Che il mio problema centri con questo bug? -> https://bugs.kde.org/show_bug.cgi?id=170867
Non credo, quel bug riguarda l'esecuzione di comandi multipli. Prova con xterm, tanto per fugare i dubbi.

Andy86
24-11-12, 18: 10
:bai

Allora... sia per xterm che konsole funziona se lo lancio così come spiegato in quella pagina:

konsole -e $SHELL -c "percorso_completo_script"
xterm -e $SHELL -c "percorso_completo_script"

Altrimenti o non partono o danno errore. :boh

Comunque preferisco konsole, xterm è bianco abbagliante e lampeggia troppo. :sisi

pierino_89
25-11-12, 13: 44
:bai

Allora... sia per xterm che konsole funziona se lo lancio così come spiegato in quella pagina:

konsole -e $SHELL -c "percorso_completo_script"
xterm -e $SHELL -c "percorso_completo_script"

Altrimenti o non partono o danno errore. :boh

Che strano... Beh, almeno hai trovato una soluzione!


Comunque preferisco konsole, xterm è bianco abbagliante e lampeggia troppo. :sisi
Quello è personalizzabile... C'è persino un'opzione di compilazione di xterm per avere la barra dei menù tipo konsole :eye

Andy86
06-12-12, 21: 38
:bai

Per gli script da eseguire su più file, stavo pensando, per non complicare troppo le cose, di sfruttare il fatto che dolphin chiama un istanza dello script per ogni file anche selezionando più file.
Quindi lo script principale (che sarà eseguito più volte), crea un file (se non esiste già) in cui scrive lo stato della sua operazione (nome file, percentuale, ecc..), e poi avvia (se non è già avviato, detto file fa da parentlock), un secondo script che contiene l'interfaccia grafica e leggendo a rotazione dal file di riferimento rappresenta a schermo lo stato di ogni file in elaborazione.
Così non devo neanche pensare a come implementare l'elaborazione di più file nello script. :oo2

Mi sfugge solo una cosa: è possibile scrivere una riga in un file di testo ad una data posizione senza generare conflitti?
Ovvero, se ogni script al primo giro legge la prima posizione disponibile nel file di testo e la memorizza, poi posso in qualche modo scrivere sempre in quella posizione essendo sicuro che ogni script scriva sempre in una posizione diversa?

ps: visto che in questo caso il sistema dei job non è applicabile, quel sistema di filtrare l'elenco dei processi attivi con | grep "nome processo" riesce a contare correttamente tutti gli script uguali in esecuzione? :m:

:thx

pierino_89
06-12-12, 22: 00
Ha più senso che il primo script lanciato scriva il suo pid su file, e tutti gli altri se trovano il processo col pid indicato in esecuzione mettano in coda i file, grep non è una scienza esatta.
La coda la puoi implementare con una named pipe, per esempio.

Andy86
06-12-12, 23: 05
Beh, non è che mi serve una cosa precisa, anche se ne esegue tre o quattro per volta va anche bene, però se per caso seleziono venti file allora deve aspettare per non sovraccaricare la cpu.
Altrimenti altro che fare lo script per semplificare.

Per la cosa di far scrivere i processi sullo stesso file che mi dici?

pierino_89
06-12-12, 23: 21
Quel che ti sto dicendo è di lasciar lavorare solo il primo script lanciato mentre gli altri mettono in coda il file ed escono. Poi se il primo debba sfornare job per elaborare più cose, quella è una tua scelta :oo2

Andy86
07-12-12, 21: 30
Ah, ok, sì. Solo che in quel caso non posso elaborare più di un file in una volta (naturalmente non vale la pena riprogettare tutto lo script per renderlo quasi un programma.

Alla fine quello che mi interessa è avere un semplice script con in più qualcosa a schermo che mi faccia vedere che qualcosa sta succedendo, e che nel caso di esecuzione multipla il qualcosa a schermo sia una cosa sola. :sisi

Se no poi diventa veramente un programma. :ghgh

pierino_89
07-12-12, 23: 47
Ah, ok, sì. Solo che in quel caso non posso elaborare più di un file in una volta (naturalmente non vale la pena riprogettare tutto lo script per renderlo quasi un programma.
Non è questione di renderlo un programma, è questione che così fai prima a gestire la cosa rispetto a usare un file (anche se sembrerebbe ovvio il contrario) :eye
Potresti per assurdo scrivere un wrapper che lanci n script come quello che hai fatto, redirigi i loro output su n file diversi in una cartella temporanea e mostri l'output di tutti ed n con un semplice cat cartellatemp/*
In alternativa, scrivono solo la percentuale come intero e fai la media dei valori letti nel wrapper.



Alla fine quello che mi interessa è avere un semplice script con in più qualcosa a schermo che mi faccia vedere che qualcosa sta succedendo, e che nel caso di esecuzione multipla il qualcosa a schermo sia una cosa sola. :sisi

Se no poi diventa veramente un programma. :ghgh
Te lo dico per esperienza, più ti sforzi di ragionare con questa mentalità, più finirai per lavorare di più per non aver voluto fare le cose come andavano fatte subito :tong2
Non c'è niente di male nel fare uno script elaborato: altrimenti, nessuno si sarebbe preso la briga di usare bash per scrivere i servizi in /etc/init.d.
Se devi scomodare la lettura byte per byte, accedere alla memoria, connetterti a un database, fare cose veramente strane allora ha senso chiederti se ne vale la pena. Ma attualmente stai solo facendo operazioni batch su file, quindi non c'è niente di male :ghgh

Andy86
28-06-13, 15: 32
:bai

Scusa, ma questo comando (che a me sembra un commento):


Only registered members can view code.

Che importanza ha esattamente?

Te lo chiedo perché mi è capitato di fare uno script che senza quel comando non funzionava se lanciato come root, dava errore, mentre senza sudo partiva, però naturalmente servono i permessi.


Only registered members can view code.

ps: ma non c'è un sistema per lanciare gli script come fossero comandi di sistema? :m:
Io ho provato con PATH=$PATH:~/Documenti/Script/ (:bgg2:ehmm) ma non funziona.

pierino_89
28-06-13, 15: 50
:bai

Scusa, ma questo comando (che a me sembra un commento):


Only registered members can view code.

Che importanza ha esattamente?

Te lo chiedo perché mi è capitato di fare uno script che senza quel comando non funzionava se lanciato come root, dava errore, mentre senza sudo partiva, però naturalmente servono i permessi.
Si chiama shebang :bgg2 serve per specificare con cosa vada eseguito lo script. Se non lo specifichi, il comportamento è indefinito. Suppongo che nel tuo caso abbia lanciato con "sh" invece che con bash, e di conseguenza si sia schiantato alla prima incompatibilità.


ps: ma non c'è un sistema per lanciare gli script come fossero comandi di sistema? :m:
Io ho provato con PATH=$PATH:~/Documenti/Script/ (:bgg2:ehmm) ma non funziona.
L'idea è giusta, dipende come l'hai applicata :ghgh

Andy86
28-06-13, 15: 57
con "sh" invece che con bash

Perché... non sono la stessa cosa? :ohoh


dipende come l'hai applicata :ghgh
Cioè? Ho testato con echo, la modifica l'ha accettata... :m:

Edit: ora funziona, ho dovuto fare modifica permanente e riavvio.

pierino_89
28-06-13, 16: 13
Perché... non sono la stessa cosa? :ohoh
Assolutamente no :lol: bash è retrocompatibile con sh, ma non è detto il contrario. Motivo per cui alcuni script hanno #!/bin/bash e altri #!/bin/sh.
[edit]
generalmente /bin/sh è un link a /bin bash, ma non prenderlo per postulato. Per esempio in debian (e forse ubuntu) è un link a /bin/dash (che è più leggera e veloce)




Cioè? Ho testato con echo, la modifica l'ha accettata... :m:
Quindi hai lanciato il comando così e basta. Facendo così rimane locale alla shell in cui lo lanci e non è permanente. Inoltre, è valido solo per il tuo utente (se cambi utente il valore di ~ cambia).
Se vuoi renderlo permanente, devi aggiungerlo al tuo .bashrc, per esempio.

Andy86
28-06-13, 16: 43
:bai

Non capisco perché con la modifica a /etc/environment funziona solo come utente, se lancio con sudo non lo vede. :boh

andre@lepre:~$ remount.sh /dev/sdc1
mount: è possibile solo per root
andre@lepre:~$ sudo remount.sh /dev/sdc1
sudo: remount.sh: comando non trovato

pierino_89
29-06-13, 01: 39
Hai sostituito ~ con il percorso esplicito della tua home? in /root/Documenti/Script/ di sicuro non lo trova.

Andy86
29-06-13, 12: 33
Si, l'ho sostituito.

Comunque la modifica relativa alla shell corrente non funzionava neanche come utente, e la variabile "esplodeva" (si dice così? :ohoh) prima di venire scritta.

pierino_89
29-06-13, 13: 44
Si, l'ho sostituito.
Ma adesso funziona?


e la variabile "esplodeva" (si dice così? :ohoh)
"Espansa", se traduci letteralmente :ghgh

Andy86
29-06-13, 15: 01
No, l'avevo già sostituito da prima, non adesso, cioè l'avevo inserito nel file già con il path completo:


Only registered members can view code.

pierino_89
29-06-13, 15: 30
Leggi qui:linux - Why are PATH variables different when running via sudo and su? - Unix & Linux Stack Exchange (http://unix.stackexchange.com/questions/8646/why-are-path-variables-different-when-running-via-sudo-and-su)

Andy86
29-06-13, 15: 53
Allora, facciamo così, vediamo se con chakra fa ancora lo stesso problema, se risolvo cambiando distro, amen. :bgg2

Andy86
10-07-13, 22: 00
:bai

Allora... con chakra sono riuscito a cambiare il path modificando /etc/profile e poi richiamando il file, funziona... solo che ogni tanto si resetta e devo richiamare il file... vediamo magari dopo il riavvio... :boh

Tornando al bash, ho realizzato un piccolo script (veloce-veloce) per rimuovere eventuali residui da /media in modo che non interferiscano con kde che poi crea le cartelle con l'underscore davanti e mi incasino quando devo inserire i percorsi.


Only registered members can view code.

Come posso fare per inserirlo all'avvio in modo che venga lanciato come root? naturalmente non mi deve chiedere la password mentre si sta avviando... :lol:


Only registered members can view code.

Di sto readme non c'ho capito na' mazza... :lol:

pierino_89
11-07-13, 00: 17
:bai
Tornando al bash, ho realizzato un piccolo script (veloce-veloce) per rimuovere eventuali residui da /media in modo che non interferiscano con kde che poi crea le cartelle con l'underscore davanti e mi incasino quando devo inserire i percorsi.

Che? :confused:
Tanto per cominciare, i mount point che crea kde dovrebbe toglierseli lui, non è affar tuo. Seconda cosa, adesso le unità dovrebbero essere montate in /run/media/nomeutente (e dato che /run viene cancellato ad ogni avvio il problema si risolve comunque da sé).



Come posso fare per inserirlo all'avvio in modo che venga lanciato come root? naturalmente non mi deve chiedere la password mentre si sta avviando... :lol:

In debian c'è il file /etc/rc.local per queste cose. In Arch ci sarà qualcosa del genere, cerca in giro.


Di sto readme non c'ho capito na' mazza... :lol:
Beh, che stavi cercando in /etc/init.d?

Andy86
11-07-13, 13: 08
Che? :confused:
Tanto per cominciare, i mount point che crea kde dovrebbe toglierseli lui, non è affar tuo. Seconda cosa, adesso le unità dovrebbero essere montate in /run/media/nomeutente (e dato che /run viene cancellato ad ogni avvio il problema si risolve comunque da sé).

Parlavo dei mount point che eventualmente mi capita di creare a mano oppure che creano altri miei script, come quello del remount, che una volta terminata l'esecuzione non può certo rimuoversi il mount-point da solo, e se devo tenere il path da qualche parte (tipo lanciatore, altro script, ecc...) non posso certo montare una volta in tmp e l'altra dove vuole kde. :ghgh

Comunque mai vista questa roba del /run... kde mi ha sempre montato tutto in /media, anche su kubuntu.
In /run neanche c'è /media. :boh



Beh, che stavi cercando in /etc/init.d?

Nell'altro thread avevi detto...


Tra l'altro, su Arch hanno sempre la perversione di mettere gli initscript in /etc/rc.d invece che in /etc/init.d? :tong2

E mi sono ricordato le cose a metà... :ehmm

-----------------------------

Ps: non è che ti si è disattivata la notifica dall'altro thread? -> http://www.collectiontricks.it/forum/gnu-linux/Ct5200-installazione-configurazione-chakra/index7.html#post169453

pierino_89
11-07-13, 13: 38
Parlavo dei mount point che eventualmente mi capita di creare a mano oppure che creano altri miei script, come quello del remount, che una volta terminata l'esecuzione non può certo rimuoversi il mount-point da solo, e se devo tenere il path da qualche parte (tipo lanciatore, altro script, ecc...) non posso certo montare una volta in tmp e l'altra dove vuole kde. :ghgh

In realtà potresti, perché io monto le mie cose in /media (e kde lo sa, perché finiscono in fstab o in mtab) mentre kde (udisk?) le mette in /run/media. Quindi potresti anche montarle momentaneamente in /tmp, così sei sicuro che al riavvio non hai rimasugli.



Comunque mai vista questa roba del /run... kde mi ha sempre montato tutto in /media, anche su kubuntu.
In /run neanche c'è /media. :boh

Boh, a me è già da qualche mese che lo fa... Farà parte di quelle politiche strane tipo il cambio nome delle interfacce di rete (vedrai, vedrai :ghgh)



Nell'altro thread avevi detto...



E mi sono ricordato le cose a metà... :ehmm

Sì però dico, indipendentemente da dove siano, cosa volevi fare? Volevi preparare un initscript nuovo per quello script lì? :tong2



Ps: non è che ti si è disattivata la notifica dall'altro thread? -> http://www.collectiontricks.it/forum/gnu-linux/Ct5200-installazione-configurazione-chakra/index7.html#post169453Sì, esatto :triste

Andy86
11-07-13, 13: 52
In realtà potresti, perché io monto le mie cose in /media (e kde lo sa, perché finiscono in fstab o in mtab) mentre kde (udisk?) le mette in /run/media. Quindi potresti anche montarle momentaneamente in /tmp, così sei sicuro che al riavvio non hai rimasugli.

Si, ma poi per ogni lanciatore che interagisce con quella partizione dovrei fare uno script che cerca in mtab dov'è montata e quindi faccia da lanciatore "dinamico"... e poi chi c'ha voglia?



Volevi preparare un initscript nuovo per quello script lì? :tong2

Cioè?

Initscript non significa semplicemente un qualunque script che gira all'avvio? :ohoh :ehmm

pierino_89
16-07-13, 00: 02
Si, ma poi per ogni lanciatore che interagisce con quella partizione dovrei fare uno script che cerca in mtab dov'è montata e quindi faccia da lanciatore "dinamico"... e poi chi c'ha voglia?

Non ho capito cosa intendi fare... Se me lo spieghi magari vediamo se c'è un modo più furbo per farlo.



Cioè?
Initscript non significa semplicemente un qualunque script che gira all'avvio? :ohoh :ehmm
No, un initscript ti serve per agire/ottenere informazioni su un servizio (avvio, stop, restart, eventualmente reload e stato). Per far girare un servizio all'avvio ti serve un initscript (se vuoi fare le cose a modo), ma un initscript NON È un servizio.

Andy86
21-07-13, 18: 46
:bai


Non ho capito cosa intendi fare... Se me lo spieghi magari vediamo se c'è un modo più furbo per farlo.

Intendevo che se per es. io ho un lanciatore che fa /media/partizionemontata/aprioeseguifile, quando partizionemontata viene montata, es., in /tmp oppure in /media/partizionemontata_, il lanciatore è broken. :sisi

Siccome alcune periferiche di archiviazione di massa quando le smonto spariscono dall'elenco dei device, per fare il remount senza togliere e rimettere la chiavetta tutte le volte avevo fatto quello script là del remount... solo che poi rimaneva il mount-point creato a mano e all'avvio kde montava con l'underscore davanti.

Il problema era sorto più che altro quando volevo sfruttare lo script per gestire velocemente i remounting a mano (ora non mi ricordo neanche perché) e mi ritrovavo con i percorsi assoluti... variabili.



Per questo motivo uso il job control di bash: quando lancio un comando con "&" al fondo, viene eseguito in background e posso vederne lo stato con il comando "jobs". Contando le righe di "jobs" so quanti processi sono ancora attivi.
Ogni mezzo secondo controllo se c'è un posto libero ed eventualmente ne lancio un'altro.

Posso usare questo sistema anche per killare un processo che rilancio continuamente in un while come osd_cat?

Io ho fatto così:


Only registered members can view code.

Ma non risolve il problema, perché osd_cat dura tre secondi e dopo parte il successivo e così non visualizza la modifica in tempo reale, e, quando chiudo il gioco, lo script rimane in esecuzione continuando a mandare tutti gli osd_cat che sono rimasti in coda. http://www.collectiontricks.it/images/smilies/unknow.gif

EDIT: Avevo dimenticato un $, comuque ammazza se è pericoloso sto kill... ho buttato giù kde senza neanche sapere come. :ghgh

Comunque anche così non funziona, ho provato anche a processare il pid con awk per tenere solo la seconda serie di numeri, ma pare che la var arrivi vuota e così mi fa il kill senza parametri e butta giù tutto.

Mi affido alla tua esperienza. Io l'unica cosa che ho capito è che osd_cat è fatto per leggere direttamente da una pipe, e mi sembra un grosso limite perché impedisce di "pulire" l'ouput prima di visualizzarlo...

Due pipe non le posso fare perché per la seconda non si verifica più l'esecuzione concorrente e quindi termina.

pierino_89
22-07-13, 02: 14
:bai
Siccome alcune periferiche di archiviazione di massa quando le smonto spariscono dall'elenco dei device, per fare il remount senza togliere e rimettere la chiavetta tutte le volte avevo fatto quello script là del remount... solo che poi rimaneva il mount-point creato a mano e all'avvio kde montava con l'underscore davanti.

Ho capito... Però basta dichiarare in fstab dove va montata la partizione e kde evita di creare la cartella con l'underscore perché sa che deve montarla proprio lì.



Posso usare questo sistema anche per killare un processo che rilancio continuamente in un while come osd_cat?

Non direttamente, il job id e il pid sono cose completamente diverse :eye



Io ho fatto così:


Only registered members can view code.

Tanto vale usare `mktemp -u` e saltare rm.




Only registered members can view code.

Questo comando restituisce tutto tranne che un pid valido, quindi è normale che vengano ammazzati processi a caso :ghgh
Se vuoi sapere il pid dell'ultimo comando lanciato, lo trovi nella variabile "$!".



Ma non risolve il problema, perché osd_cat dura tre secondi e dopo parte il successivo e così non visualizza la modifica in tempo reale, e, quando chiudo il gioco, lo script rimane in esecuzione continuando a mandare tutti gli osd_cat che sono rimasti in coda. :boh
Cinque secondi. Comunque è regolato dall'opzione -d.



Mi affido alla tua esperienza. Io l'unica cosa che ho capito è che osd_cat è fatto per leggere direttamente da una pipe
Legge da standard input, se vogliamo essere precisi :ghgh



e mi sembra un grosso limite perché impedisce di "pulire" l'ouput prima di visualizzarlo... Due pipe non le posso fare perché per la seconda non si verifica più l'esecuzione concorrente e quindi termina.
[/quote]
Non è vero, puoi metterle tra parentesi in modo da farle passare per comando singolo:

Only registered members can view code.
oppure puoi scrivere una funzione che lo faccia e lanciare la funzione con &.

Tornando a noi, hai fatto un sacco di ragionamenti per niente. osd_cat legge da standard input o da file, e stampa tutte le linee che trova a schermo finché non incontra EOF.
Questo significa che se tu passi la fifo come file di input a osd_cat, esso continuerà a leggere dalla pipe finché almeno un processo ce l'ha aperta in scrittura (ovvero finché wine è attivo), stampando a schermo ogni linea che viene buttata dentro.
Ma a questo punto tanto vale saltare la fifo e passare direttamente l'output filtrato di wine in pipe a osd_cat.

Morale: possiamo riscrivere lo script in maniera molto più stringata ed efficiente:

Only registered members can view code.
So che rimane quasi illeggibile, però dovrebbe funzionare decisamente meglio [/FONT]:tong2

Andy86
22-07-13, 13: 59
:bai


# se il volume di dati è umano pui toglierlo, io l'ho provato con 'yes' e si piantava

Questo commento non l'ho capito, ma comunque con quel sistema osd_cat lancia un solo processo?

Perché il problema era quello, lanciare un solo processo di osd_cat e interagire sempre con quello, per quello volevo metterlo in lettura su di una fifo.

Tralasciando il mio fastidio per il codice incasinato, l'importante è che ci riesco a mettere una variabile al posto dell'eseguibile, così chiamo sempre lo stesso script attraverso i lanciatori, senza duplicarlo millemila volte.

pierino_89
22-07-13, 14: 27
:bai
Questo commento non l'ho capito

Il comando 'yes' come puoi facilmente vedere si limita a fare 'echo y' all'infinito. osd_cat non ci sta dietro con il ridisegno e si pianta. Quel che intendo dire è: se wine sputa fuori i fps ogni n millisecondi puoi tralasciare il while, altrimenti è necessario per fare buffer.



ma comunque con quel sistema osd_cat lancia un solo processo?
Yes



Perché il problema era quello, lanciare un solo processo di osd_cat e interagire sempre con quello, per quello volevo metterlo in lettura su di una fifo.
Non serve la fifo, basta che passi in pipe l'output.



Tralasciando il mio fastidio per il codice incasinato, l'importante è che ci riesco a mettere una variabile al posto dell'eseguibile, così chiamo sempre lo stesso script attraverso i lanciatori, senza duplicarlo millemila volte.
Non ho afferrato, cosa intendi sostituire con una variabile?

Andy86
22-07-13, 14: 37
Intendo sostituire con il parametro, %1, cioè passo in parametro il percorso allo script, così uso lo stesso script con più lanciatori. :bgg2


Il comando 'yes' come puoi facilmente vedere si limita a fare 'echo y' all'infinito. osd_cat non ci sta dietro con il ridisegno e si pianta. Quel che intendo dire è: se wine sputa fuori i fps ogni n millisecondi puoi tralasciare il while, altrimenti è necessario per fare buffer.

Basta che con lo sleep non mette tutto in coda che poi mi mostra gli fps sbagliati perché non sono più in tempo reale. :m:

Piuttosto preferisco collassare le chiamate, ma non so se si può fare tutto nel concatenamento.

pierino_89
22-07-13, 14: 46
Intendo sostituire con il parametro, %1, cioè passo in parametro il percorso allo script, così uso lo stesso script con più lanciatori. :bgg2

Intendi una cosa così?

Only registered members can view code.


Basta che con lo sleep non mette tutto in coda che poi mi mostra gli fps sbagliati perché non sono più in tempo reale. :m:

Piuttosto preferisco collassare le chiamate, ma non so se si può fare tutto nel concatenamento.
Uhm, hai ragione, bisognerebbe modificare il while in modo che cestini tutto. Però in tal caso non va bene sleep, devi lavorare con "date".

Andy86
22-07-13, 14: 58
No, intendevo semplicemente così:


Only registered members can view code.

sempre che funziona.


Uhm, hai ragione, bisognerebbe modificare il while in modo che cestini tutto. Però in tal caso non va bene sleep, devi lavorare con "date".

Aiuto, che casino. A fare con tutto il codice in pipe non me la cavo più. :wall

pierino_89
22-07-13, 15: 13
No, intendevo semplicemente così:


Only registered members can view code.

sempre che funziona.

Eh, ma in bash il primo argomento è $1, non %1.



Aiuto, che casino. A fare con tutto il codice in pipe non me la cavo più. :wall
Beh, leva tutto il while e provalo, se poi vedi che gratta o si inchioda ci pensiamo.

Andy86
22-07-13, 15: 35
Eh, ma in bash il primo argomento è $1, non %1.
:ops:... mi sono confuso con il batch di win. :ghgh


Beh, leva tutto il while e provalo, se poi vedi che gratta o si inchioda ci pensiamo.
Ok, Stasera quando provo edito il post. :bai

EDIT: C'è un piccolo problema, così non si riesce a mandare il gioco in background, perciò lo script non prosegue fin quando non termina il gioco. :wall

Se metto la & dopo 2>&1 il gioco non parte, come quando non si da il comando wine, se la metto prima fa come se niente fosse. :boh

Andy86
23-07-13, 16: 16
:bai

Sembra che ci sia un problema con AWK, se lo rimuovo funziona, se metto awk non esce niente, eppure se provo lo stesso script con echo invece che con wine funziona giusto... possibile che awk sia incompatibile con wine?

La stringa di wine è questa qui:


Only registered members can view code.

quindi ho contato giusto. :m:

pierino_89
23-07-13, 19: 27
Prova
Only registered members can view code.

Andy86
23-07-13, 20: 05
:bai

Il linguaggio delle espressioni di sed devo decidermi ad impararlo... mi sembra sempre una lingua straniera. :ghgh

Comunque anche così osd_cat non si avvia... sembra che la pipeline s'interrompa a metà, perché il processo di osd_cat non è neanche presente tra i processi attivi... :boh

pierino_89
23-07-13, 20: 22
ma senza mandarlo in pipe a osd_cat stampa qualcosa?

Andy86
23-07-13, 20: 50
Si, stampa il giusto. Però sembra che ci sia uno spazio all'inizio, che sia quella la causa?

Comunque stavolta osd_cat l'ho visto tra i processi attivi, ma non stampa nulla.

pierino_89
23-07-13, 20: 58
Che roba strana. Prova a redirigerlo in una fifo e poi a fare cat della fifo. Probabilmente ci stiamo perdendo qualcosa.

Andy86
23-07-13, 22: 45
:bai

Succede che il cat della fifo legge tutto d'un fiato quando termino il gioco... finché il gioco è in esecuzione rimane in attesa, ho provato anche con il processo in bk, non cambia nulla... sembra che sed processi tutto l'output insieme alla fine, un po' come grep senza il --line-buffered. :m:


Ho visto che esiste ls /dev/stdout... è quello che penso io?
Cioè si usa come /dev/null solo che mando quello che voglio sullo standard output?
Se è così non riesco a ridirezionare a osd_cat l'output gestito in un while readline?

EDIT: Funziona!!! :shock :gogo

Ho corretto il vecchio script così:


Only registered members can view code.

Averci pensato prima che bastava così poco. :ghgh

pierino_89
24-07-13, 02: 25
Non so cosa sia /dev/stdoud, ma se funziona, chi sono io per metterlo in dubbio? :ghgh

Andy86
24-07-13, 13: 14
:bai

Neanch'io sapevo che esistesse fino a ieri... però una volta scopertolo non ci è voluto molto a immaginare cosa fosse, senza neanche bisogno di cercare.

Questa potrebbe essere una spiegazione tecnica:


/dev/stdout file is used for standard I/O streams and file descriptor (http://bash.cyberciti.biz/wiki/index.php?title=File_descriptor&action=edit&redlink=1) number 1 is used for stdout. Every command under Linux has 3 steams opened for it when it starts up. stdout is one of such file. By default stdout is used for displaying back results on the screen i.e. stdout is typically attached to the user's terminal.

Naturalmente ci sono anche stdin e stderr.

----------------------------------------

ps: per leggere la cpu c'è solo top -b? mi sembra che ritorna dei valori un po' a caso... senza -b hanno già più senso, ma non è processabile.

pierino_89
24-07-13, 13: 37
La spiegazione tecnica la so :ghgh mi ero perso che venissero creati dei device!


:bai
ps: per leggere la cpu c'è solo top -b? mi sembra che ritorna dei valori un po' a caso... senza -b hanno già più senso, ma non è processabile.
Puoi processare il valore del load istantaneo che recuperi da `uptime`

Andy86
24-07-13, 13: 49
La spiegazione tecnica la so :ghgh mi ero perso che venissero creati dei device!
Beh, nella variabile &1 qualcosa ci devono mettere, no? :lol:


Puoi processare il valore del load istantaneo che recuperi da `uptime`
Che unità di misura utilizza? :lol:

pierino_89
24-07-13, 14: 01
Load (computing) - Wikipedia, the free encyclopedia (http://en.wikipedia.org/wiki/Load_(computing))

In breve, il load rappresenta il numero di processi che hanno richiesto cpu nel tempo stabilito (in genere ottieni sempre load istantaneo, 5 minuti e 15 minuti). Se dividi il load per il numero di cpu nel sistema, ottieni approssimativamente l'utilizzo medio della cpu. Però considera che puoi superare il 100%, e pure di parecchio.

Andy86
24-07-13, 14: 34
Ma io non voglio il valore medio, io voglio il valore istantaneo, come quello nella tab processi... il problema è che il valore di
Only registered members can view code. non corrisponde con quello che mi da il gestore di processi e non capisco perchè... ma mi sto convincendo che sia il gestore processi a sbagliare qualcosa... anche perché poi c'è il grafico a barre con le cpu divise in cui si capisce ancora meno... :m:

pierino_89
24-07-13, 14: 46
Ma io non voglio il valore medio, io voglio il valore istantaneo
Il valore medio dei core :ghgh
Il load istantaneo è il valore più a sinistra.

Andy86
24-07-13, 15: 09
Sarà il caldo... ma a me sembrano sempre numeri sballati. :boh

pierino_89
24-07-13, 15: 55
È una misura un po' diversa. Comunque top non ti funziona perché secondo le impostazioni inglesi il separatore decimale è il punto e non la virgola, quindi numero - stringa = boh :tong2


Only registered members can view code.

Andy86
24-07-13, 17: 25
:bai

Comunque punto o virgola quello script da sempre all'infinito lo stesso valore... il che, anche se alcuni valori di ksysguard sono un po' sballati, mi fa pensare che ci sia qualcosa che non va. :boh