Newsgroup: it.comp.os.linux.iniziare
Titolo: Variabili d'uno script caricate con l'input da pipe

In uno script (bash) se metto:
INGRESSO="$1"
e poi do:
$: ./mio_script Pippo
e' tutto normale e ben noto e mi da':
Pippo
 
Pero', se faccio:
$: echo Pippo | ./mio_script
adesso non mi da' nulla, poiche' la variabile INGRESSO resta vuota.
 
Mi direste se c'e' un modo piu' elegante e regolare per evitare il mio
escamotage seguente grazie in anticipo?
 
INGRESSO="$(sed 's/BlabLablA//')"
$: echo Pippo | ./mio_script
Pippo
 
-- 
bye, Yoda
 


read
 
Anche se non si capisce cosa tu voglia fare...
 
La variabile $1 e la prima sulla *linea*
di comando, non sullo standard input.
 
Nel caso, c'e` "read", ma non saprei se faccia
quello che vuoi tu.
 
bye,
 
-- 
 
piergiorgio

 variabile INGRESSO resta vuota.
]zac
 
Si tratta di due processi distinti, non hanno le variabili in comune.
 
Le variabili d'ambiente del processo figlio sono una copia di quelle 
processo padre.
Anche se hanno gli stessi nomi e valori sono solo una copia.
 
Tocca trovare un modo di scambiare valori tra un processo e un altro (per 
esempio un file temporaneo).


Prima riga dello script:
 
INGRESSO=$(cat)
 
oppure:
 
read -r INGRESSO
 
Però ovviamente devi sapere bene cosa invii.
 
 
-- 
Ciò che si vede, è.
 

Addi' 06 giu 2021 12:59:16, Piergiorgio Sartor scrive:

Read grazie ma non va, perche' il numero di caratteri non e' fisso,
metto cat invece di sed, come m'ha detto Marco ciao
 
-- 
Yoda
 

 Però ovviamente devi sapere bene cosa invii.
 
Gia'.. infatti non posso usarlo perche' l'input non e' a lunghezza
fissa ariciao
 
-- 
Yoda
 

 (per esempio un file temporaneo).
 
Be' no.. figurati che ho chiesto proprio per far tutto in memoria
senza il file temporaneo ariciao
 
-- 
Yoda
 

 metto cat invece di sed, come m'ha detto Marco ciao
 
Cosa vuol dire "il numero di caratteri
non e` fisso"?
 
"read" non richiede un numero fisso di
caratteri, a meno che tu non intenda altro.
 
bye,
 
-- 
 
piergiorgio

Addi' 06 giu 2021 16:14:07, Piergiorgio Sartor scrive:

Ok.. facciamo prima a vederlo in pratica, vedi se e come si puo'
evitare l'astuzia di cat usando read, ma senza scrivere in file
di parcheggio ciao
 
-cite-
#!/bin/bash
 
if [ "$1" ]; then
INGRESSO="$1"
else
INGRESSO="$(cat)"
fi
 
if [ $INGRESSO -le 900 ]; then
echo "$INGRESSO" | awk -vOFMT="%.0f" '{print $1*1.33322, "hPa"}'
else
echo "$INGRESSO" | awk -vOFMT="%.0f" '{print $1/1.33322, "mmHg"}'
fi
-/cite-
 
(le previsioni del tempo con la pressione in hPa non ci caspisco un
accidente - capisco gli americani: fanno bene a restarsene coi loro
piedi e pollici)
 
-- 
Yoda
 

 piedi e pollici)
 
Questo e` un altro problema di sicuro... :-)
 
bye,
 
-- 
 
piergiorgio

 Non vedi ancora il problema.
 
Cioe'?
 
-- 
Yoda
 

 Non vedi ancora il problema.
 
"vedo", io.
 
bye,
 
-- 
 
piergiorgio

 Cioe'?
 
Errore mio, tastiera anarchica, era "non vedo",
io, me medesimo, il problema... :-)
 
Non era riferito a te...
 
bye,
 
 
-- 
 
piergiorgio

 Scusa, ma come facevi prima?
 
Non capisco cosa mi chiedi, ti ho postato tutto lo script, tutto,
dall'inizio alla fine.
Andava benissimo, ora ho sostituito la riga:
INGRESSO="$(cat)"
con la riga:
read INGRESSO
ed e' solo - penso - un po' piu' elegante ciao
 
Te lo torno a postare per tua comodita' e con la riga sostituita,
tanto e' brevissimo ariciao:
-cite-
#!/bin/bash
 
if [ "$1" ]; then
INGRESSO="$1"
else
read INGRESSO
fi
 
if [ $INGRESSO -le 900 ]; then
echo "$INGRESSO" | awk -vOFMT="%.0f" '{print $1*1.33322, "hPa"}'
else
echo "$INGRESSO" | awk -vOFMT="%.0f" '{print $1/1.33322, "mmHg"}'
fi
-/cite-
 
-- 
Yoda
 

 dall'inizio alla fine.
 
Il comando "read" che non ti funzionava.
Non c'era nello script che hai postato
in precedenza, mi pare.
 
Ero solo curioso di sapere come lo avessi
usato, tutto qua.
Niente di importate, comunque.
 
bye,
 
-- 
 
piergiorgio

 in precedenza, mi pare.
 
Ho chiesto perche' mi sembrava da troglodita usare un escamotage per
una cosa che magari era banale e notissima (non a me!), non capivo
perche' l'input da pipe non venisse considerato (e questo me l'ha
chiarito Giuseppe).
Quanto a read, non l'ho mai neppure provato perche' ero convinto
che fosse necessario dirgli il numero di caratteri dell'input.
L'ho provato a forza perche' insistevi tu, adesso ho capito che
in alternativa al numero di caratteri accetta anche l'EOF (della
pipe) ciao e ancora grazie
 
-- 
Yoda