script bash

classic Classic list List threaded Threaded
14 messages Options
Reply | Threaded
Open this post in threaded view
|

script bash

Mario Golfetto
Buon sabato "uggioso" a tutta lista...

vi chiedo un aiuto, consapevole che la soluzione potrebbe essere una
cavolata, e il tutto dovuto solo alla mia "ignoranza" delle basilari
regole del bash scripting.

Sto cercando di risolvere un problema in un semplicissimo script bash.
In pratica ho messo una serie di comandi bash all'interno di uno script
con alcune semplici variabili.
Due comandi non funzionano: se lanciati su terminale però non danno errori.

Lo script, eseguito da root, contiene queste variabili:
> TARGET0=/dev/"$VG"/"$LV"
> VG=vgname
> LV=lvname
> MOUNT=/mnt/mountdir

VG è un volume cifrato con LUKS che è correttamente aperto da cryptsetup
(prima dei comandi in questione).

Un comando che ho inserito è:
> fsck.ext4 -a "$TARGET0"

ricevo questo errore:
> fsck.ext4: File o directory non esistente durante il tentativo di
> apertura di /dev/vgname/lvname
> Possibly non-existent device?

ma se lancio nel terminale
> fsck.ext4 -a /dev/vgname/lvname
nessun problema.

Stesso problema con questo:
> mount "$TARGET0" "$MOUNT"

mi restituisce questo:
> mount: /mnt/mountdir: special device /dev/vgname/lvname does not
> exist.

mentre se lo lancio da terminale nessun problema...

Chiaramente sono due effetti dello stesso problema che però non so
identificare.

Grazie anticipatamente per l'aiuto!
Mario

NB: lo script funzionava egregiamente su debian 8, ma da qualche mese mi
restituisce gli errori di cui sopra: forse è cambiata qualche regola di
sitassi...?

Reply | Threaded
Open this post in threaded view
|

Re: script bash

Alessandro Pellizzari-4
On 18/05/2019 19:30, Mario wrote:

> Lo script, eseguito da root, contiene queste variabili:
>> TARGET0=/dev/"$VG"/"$LV"
>> VG=vgname
>> LV=lvname
>> MOUNT=/mnt/mountdir

Devi dichiarare le variabili prima di usarle, quindi la riga con TARGET0
dovrebbe essere la terza.

Inoltre con VG=vgname assegni il valore vgname alla variabile VG.
Probabilmente quello che vuoi è lanciare il comando vgname e assegnare
il risultato alla variabile, quindi:

VG=`vgname`

(backtick, non apostrofo)

> ma se lancio nel terminale
>> fsck.ext4 -a /dev/vgname/lvname
> nessun problema.

Probabilmente perché nel tuo terminale hai già assegnato quelle
variabili, mentre nello script non esiste l'ambiente, quindi le
variabili sono vuote.

Bye.

Reply | Threaded
Open this post in threaded view
|

Re: script bash

Mario Golfetto
Il 19/05/19 11:02, Alessandro Pellizzari ha scritto:

> On 18/05/2019 19:30, Mario wrote:
>
>> Lo script, eseguito da root, contiene queste variabili:
>>> TARGET0=/dev/"$VG"/"$LV"
>>> VG=vgname
>>> LV=lvname
>>> MOUNT=/mnt/mountdir
>
> Devi dichiarare le variabili prima di usarle, quindi la riga con TARGET0
> dovrebbe essere la terza.
Nello script in realtà è dopo VG e LV. Nello scrivere la mail mi è
scappato come primo.

> Inoltre con VG=vgname assegni il valore vgname alla variabile VG.
> Probabilmente quello che vuoi è lanciare il comando vgname e assegnare
> il risultato alla variabile, quindi:
>
> VG=`vgname`
>
> (backtick, non apostrofo)
Non è esattamente questo che cerco di far fare: vorrei inviare il comando
>>> fsck.ext4 -a /dev/vgname/lvname
con il contenuto della variabile TARGET0 (che a sua volta è composta da
VG che contiene "vgname" e LV che contiene "lvname")

Sto provando anche con
> VG='vgname'
> LV='lvname'
> TARGET0='/dev/'"$VG"'/'"$LV"

ma ho lo stesso errore, anche nel mount.

> Probabilmente perché nel tuo terminale hai già assegnato quelle
> variabili, mentre nello script non esiste l'ambiente, quindi le
> variabili sono vuote.
Per ambiente intendi #!/bin/bash? sì, c'è all'inizio dello script.
O ti riferisci ad altro?

>
> Bye.
>

Grazie Alessandro per i suggerimenti. Altre idee?
ciao, Mario

Reply | Threaded
Open this post in threaded view
|

Re: script bash

gollum1-3
Il 19 maggio 2019 17:43:17 CEST, Mario <[hidden email]> ha scritto:

>Sto provando anche con
>> VG='vgname'
>> LV='lvname'
>> TARGET0='/dev/'"$VG"'/'"$LV"

hai provato con:

TARGET0="/dev/$VG/$LV"
?

byez
--
gollum1

Inviato dal mio dispositivo Android con K-9 Mail. Perdonate la brevità e gli errori, maledetto correttore automatico.

Reply | Threaded
Open this post in threaded view
|

Re: script bash

Mario Golfetto
Il 19/05/19 23:20, Gollum1 ha scritto:

> Il 19 maggio 2019 17:43:17 CEST, Mario <[hidden email]> ha scritto:
>
>> Sto provando anche con
>>> VG='vgname'
>>> LV='lvname'
>>> TARGET0='/dev/'"$VG"'/'"$LV"
>
> hai provato con:
>
> TARGET0="/dev/$VG/$LV"
> ?
>
> byez
>
ciao Gollum,

appena provato, stesso errore: fsck non trova la directory che però
esiste...

Reply | Threaded
Open this post in threaded view
|

Re: script bash

gollum1-3
Il 20 maggio 2019 00:07:50 CEST, Mario <[hidden email]> ha scritto:

>Il 19/05/19 23:20, Gollum1 ha scritto:
>> Il 19 maggio 2019 17:43:17 CEST, Mario <[hidden email]> ha
>scritto:
>>
>>> Sto provando anche con
>>>> VG='vgname'
>>>> LV='lvname'
>>>> TARGET0='/dev/'"$VG"'/'"$LV"
>>
>> hai provato con:
>>
>> TARGET0="/dev/$VG/$LV"
>> ?
>>
>> byez
>>
>ciao Gollum,
>
>appena provato, stesso errore: fsck non trova la directory che però
>esiste...

hai provato a sostituire il comando con un echo, per vedere come vengono espanse le variabili?
byez
--
gollum1

Inviato dal mio dispositivo Android con K-9 Mail. Perdonate la brevità e gli errori, maledetto correttore automatico.

Reply | Threaded
Open this post in threaded view
|

Re: script bash

Mario Golfetto
Il 20/05/19 01:30, Gollum1 ha scritto:

> Il 20 maggio 2019 00:07:50 CEST, Mario <[hidden email]> ha scritto:
>> Il 19/05/19 23:20, Gollum1 ha scritto:
>>> Il 19 maggio 2019 17:43:17 CEST, Mario <[hidden email]> ha
>> scritto:
>>>
>>>> Sto provando anche con
>>>>> VG='vgname'
>>>>> LV='lvname'
>>>>> TARGET0='/dev/'"$VG"'/'"$LV"
>>>
>>> hai provato con:
>>>
>>> TARGET0="/dev/$VG/$LV"
>>> ?
>>>
>>> byez
>>>
>> ciao Gollum,
>>
>> appena provato, stesso errore: fsck non trova la directory che però
>> esiste...
>
> hai provato a sostituire il comando con un echo, per vedere come vengono espanse le variabili?
> byez
>

sì, fatto ieri: echo restituisce correttamente il contenuto della
variabile TARGET0 e cioè /dev/vgname/lvname... ma fsck.ext4 non lo usa
(e nemmeno mount)

Meglio cambiare approccio??

Reply | Threaded
Open this post in threaded view
|

Re: script bash

gerlos


Il giorno lun 20 mag 2019 alle ore 12:57 Mario <[hidden email]> ha scritto:

sì, fatto ieri: echo restituisce correttamente il contenuto della
variabile TARGET0 e cioè /dev/vgname/lvname... ma fsck.ext4 non lo usa
(e nemmeno mount)

Meglio cambiare approccio??


Ciao, 
Forse mi sono perso qualcosa - puoi inviare di nuovo lo script completo? Da quello che ho letto ho qualche sospetto, ma non vorrei dire assurdità.

saluti,
gerlos


--
"Life is pretty simple: You do some stuff. Most fails. Some works. You do
more of what works. If it works big, others quickly copy it. Then you do
something else. The trick is the doing something else."

 gerlos  +- - - >  gnu/linux registred user #311588
Reply | Threaded
Open this post in threaded view
|

Re: script bash

Mario Golfetto
Il 20/05/19 13:33, gerlos ha scritto:

>
>
> Il giorno lun 20 mag 2019 alle ore 12:57 Mario <[hidden email]
> <mailto:[hidden email]>> ha scritto:
>
>
>     sì, fatto ieri: echo restituisce correttamente il contenuto della
>     variabile TARGET0 e cioè /dev/vgname/lvname... ma fsck.ext4 non lo usa
>     (e nemmeno mount)
>
>     Meglio cambiare approccio??
>
>
> Ciao, 
> Forse mi sono perso qualcosa - puoi inviare di nuovo lo script completo?
> Da quello che ho letto ho qualche sospetto, ma non vorrei dire assurdità.
>
> saluti,
> gerlos
> Ciao,
non avevo inviato lo script completo ma solo la parte non funzionava.

Credo sia solo una questione di sintassi: un anno fa andava tutto bene
com'era, ora no. Non so cosa sia cambiato, ma so che questo
comportamento mi sta bloccando anche l'entusiasmo di automatizzare via
script.

Comunque, scrivi pure i tuoi sospetti: non sono permaloso, vorrei uscire
da questa empasse! E magari imparare meglio qualcosa.

Spero in altri suggerimenti.

Mario

Reply | Threaded
Open this post in threaded view
|

Re: script bash

Piviul-2
Il 21/05/19 17:34, Mario ha scritto:
> [...]
> non avevo inviato lo script completo ma solo la parte non funzionava.
Se non invii lo script è molto difficile aiutarti. Se non vuoi
inviarcelo tutto almeno mandane una parte ma che abbia senso in modo che
anche noi possiamo provarlo e vedere cosa non va...

Così è davvero troppo difficile.


> Credo sia solo una questione di sintassi: un anno fa andava tutto bene
> com'era, ora no. Non so cosa sia cambiato, ma so che questo
> comportamento mi sta bloccando anche l'entusiasmo di automatizzare via
> script.
Io vedo più un problema di metodo. Se prima funzionava e ora non più e
non sei più capace di farlo funzionare, a me sembra che il problema
sarebbe stato facilmente risolvibile se tu avessi avuto un sistema di
backup efficace poiché con un semplice diff ti avrebbe permesso di
rivelare gli errori inseriti...

Ciao

Piviul

Reply | Threaded
Open this post in threaded view
|

Re: script bash

Mario Golfetto
Il 22/05/19 08:52, Piviul ha scritto:

> Il 21/05/19 17:34, Mario ha scritto:
>> [...]
>> non avevo inviato lo script completo ma solo la parte non funzionava.
> Se non invii lo script è molto difficile aiutarti. Se non vuoi
> inviarcelo tutto almeno mandane una parte ma che abbia senso in modo che
> anche noi possiamo provarlo e vedere cosa non va...
>
> Così è davvero troppo difficile.
>
>
>> Credo sia solo una questione di sintassi: un anno fa andava tutto bene
>> com'era, ora no. Non so cosa sia cambiato, ma so che questo
>> comportamento mi sta bloccando anche l'entusiasmo di automatizzare via
>> script.
> Io vedo più un problema di metodo. Se prima funzionava e ora non più e
> non sei più capace di farlo funzionare, a me sembra che il problema
> sarebbe stato facilmente risolvibile se tu avessi avuto un sistema di
> backup efficace poiché con un semplice diff ti avrebbe permesso di
> rivelare gli errori inseriti...
>
> Ciao
>
> Piviul
>
Caro Piviul,
da anni partecipo a questa ed altre ML su linux.
Leggo molto e scrivo poco perché non sono un esperto ma resto un utente
appassionato e questo ti basti.
Da utente faccio fatica a sorvolare a questo tipo di risposta.
Non è mia intenzione offendere ma qui mi hai superato il limite.

Capisco la tua frustrazione nel non avere uno sguardo più ampio,
ma rileggendo le mail precedenti (neanche tante) sono stato abbastanza
chiaro.
La mia scelta di non copiare e incollare lo script è che, semplicemente,
non è importante.

Mi sembra fuori luogo tirare in ballo questioni non pertinenti (backup??
diff? non hai proprio capito!) per giustificare la tua difficoltà a
darmi una mano.
Se non hai capito, rileggi.
Non è una questione complicata, ma se non vuoi affrontare la fatica di
capire evita di rispondere inutilmente e mascherare tutto questo dietro
ad altre motivazioni.

Io ho scritto per un problema specifico: limitati a quello, grazie!

Mario


Reply | Threaded
Open this post in threaded view
|

Re: script bash

Piviul-2
Il 22/05/19 19:27, Mario ha scritto:
> [...]
>
> Io ho scritto per un problema specifico: limitati a quello, grazie!
Caro Mario, mi dispiace averti offeso, rileggendo anche quello che ho
scritto non mi sembrava di avere usato un linguaggio o aver detto
qualcosa di offensivo ma ognuno ha la sua sensibilità.
Comunque se vuoi un aiuto da questa ml per questo problema specifico io
credo tu debba fare uno sforzo maggiore nel mandare uno script che abbia
un senso e non righe copiate da uno script oltretutto in un ordine
sbagliato... comunque vedi tu.

Stando così le cose posso solo dirti di fare un ultima prova non potendo
visionare lo script: controlla che il problema sia nello script: al
posto dei comandi (mount o fsck) prova ad inserire direttamente il/i
comando/i nello script, senza variabili e se tutto funziona, aggiungi le
variabili e poi i calcolo delle variabili così forse scopri dove è il
problema.

Buona giornata

Piviul

Reply | Threaded
Open this post in threaded view
|

Re: script bash

gerlos
In reply to this post by Mario Golfetto


Il giorno mer 22 mag 2019 alle ore 19:27 Mario <[hidden email]> ha scritto:
Il 22/05/19 08:52, Piviul ha scritto:
> Il 21/05/19 17:34, Mario ha scritto:
>> [...]
>> non avevo inviato lo script completo ma solo la parte non funzionava.
> Se non invii lo script è molto difficile aiutarti. Se non vuoi
> inviarcelo tutto almeno mandane una parte ma che abbia senso in modo che
> anche noi possiamo provarlo e vedere cosa non va...
>
> Così è davvero troppo difficile.
>
>
>> Credo sia solo una questione di sintassi: un anno fa andava tutto bene
>> com'era, ora no. Non so cosa sia cambiato, ma so che questo
>> comportamento mi sta bloccando anche l'entusiasmo di automatizzare via
>> script.
> Io vedo più un problema di metodo. Se prima funzionava e ora non più e
> non sei più capace di farlo funzionare, a me sembra che il problema
> sarebbe stato facilmente risolvibile se tu avessi avuto un sistema di
> backup efficace poiché con un semplice diff ti avrebbe permesso di
> rivelare gli errori inseriti...
>
> Ciao
>
> Piviul
>
Caro Piviul,
da anni partecipo a questa ed altre ML su linux.
Leggo molto e scrivo poco perché non sono un esperto ma resto un utente
appassionato e questo ti basti.
Da utente faccio fatica a sorvolare a questo tipo di risposta.
Non è mia intenzione offendere ma qui mi hai superato il limite.

Capisco la tua frustrazione nel non avere uno sguardo più ampio,
ma rileggendo le mail precedenti (neanche tante) sono stato abbastanza
chiaro.
La mia scelta di non copiare e incollare lo script è che, semplicemente,
non è importante.

Mi sembra fuori luogo tirare in ballo questioni non pertinenti (backup??
diff? non hai proprio capito!) per giustificare la tua difficoltà a
darmi una mano.
Se non hai capito, rileggi.
Non è una questione complicata, ma se non vuoi affrontare la fatica di
capire evita di rispondere inutilmente e mascherare tutto questo dietro
ad altre motivazioni.

OK, devo intendere che non puoi farci vedere lo script per ragioni di sicurezza nazionale. Non insisto, non voglio metterti nei guai ;-) 

Non avendo altri indizi, ti dico le possibili cause del problema che mi immaginavo:

- Potrebbe dipendere dalla shell che usi per eseguire lo script (sh, bash e zsh possono avere comportamenti lievemente diversi). 
- Potrebbe dipendere dal quoting da qualche parte nello script, o che viene interpretato in modi che non ti aspetti, o c'è qualche errore di battitura (capita anche ai migliori, per questo si controllano gli script dall'inizio alla fine)
- Potrebbe dipendere dall'ordine con il quale sono dichiarate le variabili
- Potrebbe dipendere da come dichiari le variabili (usando i backtick `` o la sostituzione $() si possono ottenere risultati un po' diversi, a volte) 
- Potrebbe dipendere da come usi le variabili nei comandi (si può usare $VAR o ${VAR} e si possono ottenere risultati un po' diversi, a volte)
- Potrebbe dipendere da come hai impostato la variabile $IFS o altre variabili d'ambiente

Queste sono le cose che mi sono venute in mente in base al poco che ci hai detto. Ovviamente, per quel poco che ne so il problema potrebbe dipendere anche da cause che non mi immagino neanche... ;-) 

Mi spiace non poterti dare indicazioni più precise. Al momento ho la sfera di cristallo in manutenzione e questo è il meglio che posso fare con le informazioni disponibili.

in bocca al lupo,
gerlos







PS La prossima volta che vai dal medico per una visita, prova a vedere che succede quando ti rifiuti di rispondere alle sue domande sui sintomi e gli dici "Non è una questione complicata, se non vuoi affrontare la fatica di capire evita di rispondere inutilmente e mascherare tutto questo dietro astrusi termini tecnici". Puoi provare a fare la stessa cosa con l'elettrauto, chiedendogli di risolvere un problema senza fargli aprire il cofano. Saranno sicuramente esperienze interessanti. 

--
"Life is pretty simple: You do some stuff. Most fails. Some works. You do
more of what works. If it works big, others quickly copy it. Then you do
something else. The trick is the doing something else."

 gerlos  +- - - >  gnu/linux registred user #311588
Reply | Threaded
Open this post in threaded view
|

Re: script bash

Luciano Franchi
In reply to this post by Mario Golfetto
Il 18/05/2019 20:19, Mario ha scritto:

> Buon sabato "uggioso" a tutta lista...
>
> vi chiedo un aiuto, consapevole che la soluzione potrebbe essere una
> cavolata, e il tutto dovuto solo alla mia "ignoranza" delle basilari
> regole del bash scripting.
>
> Sto cercando di risolvere un problema in un semplicissimo script bash.
> In pratica ho messo una serie di comandi bash all'interno di uno script
> con alcune semplici variabili.
> Due comandi non funzionano: se lanciati su terminale però non danno errori.
>
> Lo script, eseguito da root, contiene queste variabili:
>> TARGET0=/dev/"$VG"/"$LV"
>> VG=vgname
>> LV=lvname
>> MOUNT=/mnt/mountdir
> VG è un volume cifrato con LUKS che è correttamente aperto da cryptsetup
> (prima dei comandi in questione).
>
> Un comando che ho inserito è:
>> fsck.ext4 -a "$TARGET0"
> ricevo questo errore:
>> fsck.ext4: File o directory non esistente durante il tentativo di
>> apertura di /dev/vgname/lvname
>> Possibly non-existent device?
> ma se lancio nel terminale
>> fsck.ext4 -a /dev/vgname/lvname
> nessun problema.
>
> Stesso problema con questo:
>> mount "$TARGET0" "$MOUNT"
> mi restituisce questo:
>> mount: /mnt/mountdir: special device /dev/vgname/lvname does not
>> exist.
> mentre se lo lancio da terminale nessun problema...
>
> Chiaramente sono due effetti dello stesso problema che però non so
> identificare.
>
> Grazie anticipatamente per l'aiuto!
> Mario
>
> NB: lo script funzionava egregiamente su debian 8, ma da qualche mese mi
> restituisce gli errori di cui sopra: forse è cambiata qualche regola di
> sitassi...?

fsck.ext4 su Debian9:

# A=dev
# B=sda1
# fsck.ext4 /$A/$B

mount  su Debian9:

# A=dev
# B=sda1
# C=/mnt/prova

# mount -t ext4 /$A/$B   $C

Luciano