Discussione:
debian logo!
(troppo vecchio per rispondere)
Antonio Macchi
2009-11-18 12:26:18 UTC
Permalink
#!/bin/bash

trap reset 0

size=`stty size`
LINES=${size% *}
COLUMNS=${size#* }

PI2=628
PI4=$(( PI2 * 2 ))

centerx=$(( COLUMNS / 2 ))
centery=$(( LINES / 2 ))
radiusx=200
radiusy=100

text=( d e b i a n )
textlength=6
textpos=0

echo -en "\e[H\e[J"
echo -en "\e[31m"

x=0
y=0
for (( angle = 0; angle < PI4; ++angle )) {
exx=$x;
exy=$y;
x=`echo "scale=3; $centerx + s($angle / 100) * ($radiusx / 100)" | bc -l`
y=`echo "scale=3; $centery + c($angle / 100) * ($radiusy / 100)" | bc -l`
x=${x%.*}
y=${y%.*}
if test $x -ne $exx -o $y -ne $exy; then
char=${text[$(( textpos % textlength ))]}
echo -en "\e[$y;${x}H$char"
(( ++textpos ))
fi
radiusx=$(( radiusx + 2 ))
radiusy=$(( radiusy + 1 ))
}
echo -n ...

while :; do :; done
Alessandro Selli
2009-11-18 20:23:38 UTC
Permalink
Antonio Macchi wrote:

[...]
Post by Antonio Macchi
text=( d e b i a n )
textlength=6
Visto che usai una matrice, invece di definire una variabile
staticamente con il valore della sua dimensione puoi definirla
dinamicamente con la dimensione della matrice:

textlength=${#text[@]}

In questo modo si può cambiare il testo senza preoccuparsi di
aggiornare a mano la variabile textlength.
Post by Antonio Macchi
while :; do :; done
Arghh!! No, non si fa questo! Questo è quasi da bocciatura, ti manda
il computer al 100% di carico di lavoro solamente per attendere il
SIGTERM per uscire!

Miglioramento 1: si inserisce uno sleep 1 tra il do e il done;
Miglioramento 2, l'unico da prendere veramente in considerazione: si
sostituisce tutto il while do done con un semplice read NULLA. Così si
esce dallo script banalmente premendo <Invio>.


Ciao,
--
Alessandro Selli http://alessandro.route-add.net
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.
Antonio Macchi
2009-11-19 09:55:52 UTC
Permalink
Post by Alessandro Selli
Visto che usai una matrice, invece di definire una variabile
staticamente con il valore della sua dimensione puoi definirla
giusto.
okkio pero' che [@] non ha senso
cioe', ha senso solo se usi le virgolette
usando "[@]" si espande mantenendo gli spazi interni
se non lo virgoletti, tanto fa usa [*]

vabbe'.. ma son minuzie
Post by Alessandro Selli
Post by Antonio Macchi
while :; do :; done
Arghh!! No, non si fa questo! Questo è quasi da bocciatura, ti manda
il computer al 100% di carico di lavoro solamente per attendere il
SIGTERM per uscire!
acc.
e' vero

thanks!!!
Alessandro Selli
2009-11-18 21:11:25 UTC
Permalink
Post by Antonio Macchi
#!/bin/bash
trap reset 0
Un'altra cosa: il reset è un comando da non usarsi alla leggera. Se
un qualche utente ha configurato il proprio terminale in una maniera non
standard per dei precisi motivi (incompatibilità del suo terminale con
un certo sistema o SO, ad es.), il reset potrebbe scombinargli tutto
riportandogli il terminale in una configurazione standard, ma non
desiderata o addirittura non funzionale per la sua situazione. Si deve
piuttosto riportare il terminale nella condizione precedente
l'esecuzione dello script, annullando i soli cambiamenti apportati.
L'unico cambiamento effettuato dallo script al terminale è il
Post by Antonio Macchi
echo -en "\e[31m"
Sarebbe meglio allora far si che all'uscita si rimetta il colore di
default:

trap 'echo -en "\e[0m"' 0

Meglio ancora sarebbe salvarsi lo stato del terminale all'inizio e
reintegrarlo alla fine dell'esecuzione, ma almeno questa semplice
miglioria mette al sicuro dalla perdita di impostazioni esotiche ma
potenzialmente importanti del terminale usato.


Ciao,
--
Alessandro Selli http://alessandro.route-add.net
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.
Antonio Macchi
2009-11-19 09:57:07 UTC
Permalink
Post by Alessandro Selli
Meglio ancora sarebbe salvarsi lo stato del terminale all'inizio e
reintegrarlo alla fine dell'esecuzione, ma almeno questa semplice
miglioria mette al sicuro dalla perdita di impostazioni esotiche ma
potenzialmente importanti del terminale usato.
e come lo salvo lo stato di un terminale?
Alessandro Selli
2009-11-19 13:24:45 UTC
Permalink
Post by Antonio Macchi
Post by Alessandro Selli
Meglio ancora sarebbe salvarsi lo stato del terminale all'inizio e
reintegrarlo alla fine dell'esecuzione, ma almeno questa semplice
miglioria mette al sicuro dalla perdita di impostazioni esotiche ma
potenzialmente importanti del terminale usato.
e come lo salvo lo stato di un terminale?
So dello switch -g o --save di stty, ma non so come poi glielo si da in
pasto per reimpostare lo stato del terminale. O meglio, su Fedora11 il
comando stty $(stty -g) funziona, ma su una Gentoo mi da l'errore che la
riga di comando non va bene (se ricordo bene si lamenta che è troppo
lunga). Forse gli dovrei aprire una notifica di baco! :-)

Ah, ecco: se dopo aver salvato lo stato del terminale ne cambio la
velocità:

[***@coccodrillo]$ stty speed
38400
[***@coccodrillo]$ stty -g
4500:5:bf:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
[***@coccodrillo]$ stty 115200
[***@coccodrillo]$ stty speed
115200

e infatti lo stato del terminale è cambiato:

[***@coccodrillo]$ stty -g
4500:5:10b2:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0

quando tento di restaurare il vecchio stato mi da questo errore:

[***@coccodrillo]$ stty
'4500:5:bf:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0'
stty: standard input: impossibile eseguire tutte le operazioni richieste


Boh?


Ciao,
--
Alessandro Selli http://alessandro.route-add.net
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.
Chiave PGP/GPG: EC885A8B
antoniomac5
2009-11-19 16:59:27 UTC
Permalink
Post by Alessandro Selli
'4500:5:bf:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0'
stty: standard input: impossibile eseguire tutte le operazioni richieste
sulla console non riesco neanche a cambiare la velocita'.

$ stty speed

38400

$ stty 115200

stty: standard input: unable to perform all requested operations

$ stty speed

38400


pero', se faccio lo stesso dentro a "script", oppure dentro "screen"
il
coportamento diventa simile a quello che hai avuto tu (su un xterm
immagino...)

cioe', la velocita' cambia, ma si riceve lostesso una segnalazione
d'errore


non solo, ma se avvio getty su una console, con velocita' diverse da
38400, l'indicazione di velocita' non viene presa in considerazione, e
ottengo sempre una velocita' di 38400

$ sudo getty 9600 tty1

[...]

$ stty speed
38400


mentre se faccio lo stesso su una xterm, la velocita' (almeno quella
apparente mostrata da "stty speed") cambia.

forse semplicemente il cambio di velocita' a "caldo" e' un'operazione
piu' complessa di quel che sembra (ipotizzando vere connessioni
seriali ovviamente...)

Loading...