[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[lungo?] more/less e iso8859; console v/ script



Ciao a tutti.
Vagando nel mare magnum dei comandi GNU/Linux ho incontrato uno scoglio
che non riesco a superare ... :-)

Il tutto e` cominciato quando mi e` venuto il ghiribizzo di stampare un
elenco di brani musicali senza la barra contraria (\) che consente di
distanziare le parole. La cosa mi e` piaciuta a tal punto che ho deciso
valesse la pena di estenderla anche alla semplice visualizzazione a
schermo e salvarla in uno script parametrizzato... :-). 
 
Vi risparmio i dettagli della messa a punto: alla fine son riuscito ad
avere cio` che desideravo, dopo una ennesima lettura di man more e man
less e la 'scoperta' di set LESSCHARSET= ... : si`, perche', se come
pager indicavo more, scorreva tutto tranquillo e visualizzavo per benino
anche i codici > ascii 127, ma, se indicavo less, il mio schermo
diventava una carta geografica, punteggiata di F* in 'reverse' (al posto
dei suddetti >127) ;((( . La cosa che piu` mi faceva male era che 'user'
riusciva a visualizzare correttamente, sia con more che con less, mentre
'root' aveva problemi!

Torniamo a ora. Sistemato lo script, ho verificato la stessa istruzione
da console e, vi sembrera` strano (?): quel diavoletto che ho sconfitto
nello script si ripresenta 'dal vivo', piu` virulento che mai ... :-)

L'istruzione (sulla linea di comando) e`:

# ls dummy | tr -s '\\' ' ' |less # [more] (non va!) , oppure
$ ls dummy | tr -s '\\' ' ' |less # [more] (ok)

Naturalmente, 'dummy' raccoglie nomi contenenti i caratteri incriminati,
sia root che user hanno la stessa keymap (verificato che ALT+x (x>127)
da` lo stesso risultato per entrambi); ho spuntato i due 'env', identici
quanto a LANG e LC_* (root ha LESSCHARSET=iso8859, che a user non
serve (per lo script) ); ho definito (piu` per scrupolo che per altro)
anche in root quelle variabili che gli mancavano rispetto a user, tipo
BASH_ENV e SLANG_EDITOR, gli ho tolto LESSCHARSET= ... ma il risultato
e` sempre lo stesso: carta geografica (se root)!

			#################
			
Alla fine della storia resto con diversi 'indovinelli da chiarire' (vi
prego di sopportarmi ancora per qualche riga :-) ):

1. donde deriva il comportamento difforme _script/linea-di-comando_? Ha
forse a che fare con la (re-)inizializzazione dell'ambiente da parte di
bash quando esegue lo script? (sia root che user fanno gli stessi
passaggi: login testuale e richiamo dello (stesso) script) [La lettura
del par. 'INVOCATION' in man bash mi ha sempre dato il mal di mare :-)]

2. quelli tra voi che hanno sotto mano i sorgenti di more e di less
   potranno forse verificare che more usa 'di iniziativa' iso8859? (e,
   quindi, riusciva a visualizzare diversamente da less (prima della
   'cura')

3. per quale perversa ricombinazione di 0 e 1 il comportamento virtuoso
   di more (nello script, che vi risparmio, ma non contiene altro che la
   verifica di $1 oltre allo stesso, identico comando) subisce quella
   metamorfosi, quando invocato da linea di comando?

4. quali altre variabili ambientali potrebbero essere responsabili del
   diverso comportamento dello stesso comando impartito da una shell di
   root e da una di user?

Forse non vi faro` dormire stanotte, e me ne dispiace ... -:), ma potete
prendervela anche comoda: l'importante e` il risultato ... ;)))

A presto (... spero ! ;) )
   
-- 
[Perche' usare Win$ozz (dico io) se ..."anche uno sciocco sa farlo.    \\?//
 Fa' qualche cosa di cui non sei capace!"   (diceva Henry Miller) ]    (°|°)
 Ennio. (Please change . for .dot. and @ for .at. in my Reply-To)       )=(



-- 
[Perche' usare Win$ozz (dico io) se ..."anche uno sciocco sa farlo.    \\?//
 Fa' qualche cosa di cui non sei capace!"   (diceva Henry Miller) ]    (°|°)
 Ennio. (Please change . for .dot. and @ for .at. in my Reply-To)       )=(



Reply to: