Pagina 1 di 1

concatenazione "atipica" di comandi in shell

Inviato: sabato 30 luglio 2011, 17:45
da novainvicta
salve!

ho già visto che è possibile eseguire più comandi shell su una sola riga aggiungendo separandogli con il carattere |,
io devo fare una cosa un pochino diversa..

avete presente quando avviate un programma da terminale che chiede degli input, come "inserisci e-mail, nome, cognome" o cose simili..
ecco.. devo fare proprio questo.. oltre ad avviare il programma X, prevedere dentro la riga di comando stessa anche i parametri successivi

come si fa?

Re: concatenazione "atipica" di comandi in shell

Inviato: sabato 30 luglio 2011, 18:21
da gikbuntu
Non ho capito bene: stai scrivendo un programma?
Se sì (oltre a segnalare ai mod che spostino in programmazione) io farei così:
creo uno script bash.
Poi, senza fare impazzire chi dovrebbe usare quel programma da terminale, farei una procedura del tipo:

Codice: Seleziona tutto

#!/bin/bash
echo "inserisci un nome"
read $nome
echo "inserisci e-mail"
read $email
echo "inserisci server pop"
read $pop
poi ovviamente con $nome $email ed $pop ci puoi fare quello che vuoi.
Non concateni le stringhe, ma fai un programma più "user friendly"

Re: concatenazione "atipica" di comandi in shell

Inviato: sabato 30 luglio 2011, 18:33
da novainvicta
grazie per la risposta

quello che devo realizzare è l'esatto opposto,
il programma è già scritto.. (non da me).. è cryptsetup,
il quale in alcune operazioni richiede degli input da tastiera che a quanto so non sono passabili per argomento

in poche parole quello che mi serve è che da una riga di comando shell,
oltre ad avviare cryptsetup deve anche "inserire" in sequenza quando il programma li chiede dei parametri (come nome, cognome, etc..)

p.s.
sebbene questa esigenza nasce dalla scrittura di un programma, la domanda è generica ed applicabile a qualsiasi script shell, per questo ho pensato di metterla in questa sezione del forum

Re: concatenazione "atipica" di comandi in shell

Inviato: sabato 30 luglio 2011, 18:38
da gikbuntu
Ok capito.
puoi sempre risolvere con bash.

Codice: Seleziona tutto

#!/bin/bash
echo "inserisci il tuo nome"
read nome
echo "inserisci il cognome"
read cognome
read "inserisci l'indirizzo e-mail"
read email
cryptsetup $nome $cognome $email
Devi controllare però l'esatto ordine di inserimento.

Re: concatenazione "atipica" di comandi in shell

Inviato: sabato 30 luglio 2011, 18:41
da novainvicta
molto gentile! ..proprio quello che cercavo, provo e vedo che succede

Re: concatenazione "atipica" di comandi in shell

Inviato: sabato 30 luglio 2011, 18:48
da GREY_FOX
non penso proprio che funzioni in questo modo! a quanto pare li vuole a mano a mano i dati non direttamente come parametri.
Io proverei sempre con uno script in bash in qui richiami l'eseguibile e dopo ricordando la sequenza dei dati da inserire in automatico ne fai l'echo. Vedi se ti da problemi per l'accapo...

Re: concatenazione "atipica" di comandi in shell

Inviato: domenica 31 luglio 2011, 0:57
da novainvicta
si infatti, ma non ho capito come dovrei comporre lo script?
qualche cosa come:
programma X
echo comando1
echo comando2
?
GREY_FOX ha scritto: non penso proprio che funzioni in questo modo! a quanto pare li vuole a mano a mano i dati non direttamente come parametri.
Io proverei sempre con uno script in bash in qui richiami l'eseguibile e dopo ricordando la sequenza dei dati da inserire in automatico ne fai l'echo. Vedi se ti da problemi per l'accapo...

Re: concatenazione "atipica" di comandi in shell

Inviato: domenica 31 luglio 2011, 11:52
da gikbuntu
GREY_FOX ha scritto: non penso proprio che funzioni in questo modo! a quanto pare li vuole a mano a mano i dati non direttamente come parametri.
Io proverei sempre con uno script in bash in qui richiami l'eseguibile e dopo ricordando la sequenza dei dati da inserire in automatico ne fai l'echo. Vedi se ti da problemi per l'accapo...
Da me ha sempre funzionato...
si infatti, ma non ho capito come dovrei comporre lo script?
qualche cosa come:
programma X
echo comando1
echo comando2
?
Allora:
echo => Stampa a video la scritta che gli dai dopo "..........", oppure i valori che vuoi ($nome, ecc. ecc)
read => "legge" ciò che digita l'utente, per poi salvarlo nella stringa, il cui nome specifichi dopo read (ad es. read nomefile)
$nomefile => La stringa che hai preso prima con read.
Quindi, mettendo che la procedura di cryptsetup sia (in rosso quello che scrivi tu):
Inserisci il nome:
mario
Inserisci il cognome
rossi
inserisci l'email
mariorossi@ubuntu-it.org

Lo script che eseguirai tu sarà:

Codice: Seleziona tutto

#!/bin/bash
echo "inserisci il tuo nome"
read nome
echo "inserisci il cognome"
read cognome
read "inserisci l'indirizzo e-mail"
read email
cryptsetup $nome $cognome $email
$nome, $cognome, $email sono esattamente nell'ordine che ti chiede cryptsetup

Re: concatenazione "atipica" di comandi in shell

Inviato: domenica 31 luglio 2011, 15:00
da Elrond
novainvicta ha scritto: ho già visto che è possibile eseguire più comandi shell su una sola riga aggiungendo separandogli con il carattere |,
Il simbolo | si chiama pipe e serve per mandare l'output del comando precedente come input del comando successivo; per separare dei comandi slegati in modo che possano essere scritti tutti su un'unica riga bisogna usare il punto e virgola (se ne parla sempre nella stessa pagina linkata prima, più in alto rispetto alla pipe)

Re: concatenazione "atipica" di comandi in shell

Inviato: lunedì 1 agosto 2011, 3:09
da GREY_FOX
gikbuntu ha scritto:
GREY_FOX ha scritto: non penso proprio che funzioni in questo modo! a quanto pare li vuole a mano a mano i dati non direttamente come parametri.
Io proverei sempre con uno script in bash in qui richiami l'eseguibile e dopo ricordando la sequenza dei dati da inserire in automatico ne fai l'echo. Vedi se ti da problemi per l'accapo...
Da me ha sempre funzionato...
si infatti, ma non ho capito come dovrei comporre lo script?
qualche cosa come:
programma X
echo comando1
echo comando2
?
Allora:
echo => Stampa a video la scritta che gli dai dopo "..........", oppure i valori che vuoi ($nome, ecc. ecc)
read => "legge" ciò che digita l'utente, per poi salvarlo nella stringa, il cui nome specifichi dopo read (ad es. read nomefile)
$nomefile => La stringa che hai preso prima con read.
Quindi, mettendo che la procedura di cryptsetup sia (in rosso quello che scrivi tu):
Inserisci il nome:
mario
Inserisci il cognome
rossi
inserisci l'email
mariorossi@ubuntu-it.org

Lo script che eseguirai tu sarà:

Codice: Seleziona tutto

#!/bin/bash
echo "inserisci il tuo nome"
read nome
echo "inserisci il cognome"
read cognome
read "inserisci l'indirizzo e-mail"
read email
cryptsetup $nome $cognome $email
$nome, $cognome, $email sono esattamente nell'ordine che ti chiede cryptsetup
Se il programma che deve usare chiede solo parametri da linea di comando ok ma se li chiede in esecuzione cosi non funziona.

Re: concatenazione "atipica" di comandi in shell

Inviato: lunedì 1 agosto 2011, 3:24
da smurf
dico la mia, magari è un boiata comunque....

per prima cosa bisogna vedere se cryptsetup (che non conosco affatto) vuole i dati in input uno per uno, a sua richiesta, o se li accetta tutti insieme.
Se li accetta tutti insieme basta fare

Codice: Seleziona tutto

cryptsetup param1 param2 param3
se invece li vuole uno per uno si potrebbe provare

Codice: Seleziona tutto

echo param1 param2 param3 | cryptsetup

Re: concatenazione "atipica" di comandi in shell

Inviato: martedì 3 gennaio 2012, 0:39
da novainvicta
Elrond ha scritto:
novainvicta ha scritto: ho già visto che è possibile eseguire più comandi shell su una sola riga aggiungendo separandogli con il carattere |,
Il simbolo | si chiama pipe e serve per mandare l'output del comando precedente come input del comando successivo; per separare dei comandi slegati in modo che possano essere scritti tutti su un'unica riga bisogna usare il punto e virgola (se ne parla sempre nella stessa pagina linkata prima, più in alto rispetto alla pipe)
alla fine non sono mica riuscito
il tuo commento era quello che sembrava dare più speranza, ma non ho trovato quel punto e virgola di cui parlavi..