2013-03-15 10 views
5

Ho uno script (da un fornitore per mascherare le password) che passa attraverso una serie di input utente e genera un output basato sull'input. Mi piacerebbe essere in grado di avvolgere un altro script attorno ad esso che alimenta l'input da un file di testo, e quindi cattura l'output per un uso successivo. Qualcuno ha qualche esempio di questo?Come alimentare l'input a uno script bash interattivo da un file di testo

AGGIORNAMENTO: Ho eseguito alcuni scavi e si scopre che lo script della shell avvia un processo Java che è ciò che richiede l'input dell'utente. xargs e <,>, | non sembra funzionare per questo.

+2

Contenuto insufficiente per una risposta, ma consultare ['expect'] (http://expect.sourceforge.net/). –

+3

Hai provato il normale reindirizzamento I/O? A seconda di come lo script legge il suo input, a volte funzionerà. –

risposta

-1

Che ne dite di una funzione di shell

function script_plus() 
{ 
    if [ $# != 2 ]; then echo "usage: ..."; exit; fi 
    src=$1; 
    tgt=$2; 
    if [ ! -f $src ]; then echo "usage: ..."; exit; fi 
    cat $src | xargs script > $tgt 
} 

Assume 'script' è lo script fornitore. Non esegue il controllo degli errori (solo per illustrazione). Se non è una funzione di shell, il corpo di sopra script_plus potrebbe essere il contenuto di un file di script di shell.

+1

Hai alcuni problemi di codice - per esempio, hai 'src' dove hai bisogno di' "$ src" '- ma in fondo, non penso che' script_plus FOO BAR' sia per niente superiore a 'script < FOO > BAR', e non penso che questo sia un approccio che vale la pena di raccomandare. – ruakh

+0

Grazie, risolto con xargs. Ovviamente "vale la pena consigliare" i cambiamenti quando è necessario aumentare lo script con il controllo degli errori/arg. L'input esiste, per esempio. – GoZoner

+0

'xargs' non è sicuramente ciò di cui l'OP ha bisogno. Lo script esistente non prende queste cose come parametri della riga di comando; piuttosto, "passa attraverso una serie di input dell'utente". – ruakh

5

myscript <input_file> output_file (dalla riga di comando) legge input_file riga per riga come se fosse l'input dell'utente, quindi scrive l'output su output_file. Attenzione però, se output_file esiste già, sarà completamente sovrascritto senza alcun avviso.

+0

'<', '>' e '|' sono tutti buoni strumenti per sapere. 'script1 | script2' prende l'output di 'script1' e lo inserisce in' script2' come input. – Lorkenpeist

+0

'>>' è un altro strumento utile. 'myscript >> output_file' aggiungerà l'output da' myscript' alla fine di 'output_file'. – Lorkenpeist

+0

grazie per la risposta. vedi Aggiornamenti sopra. In realtà è un processo Java avviato da uno script di shell. senza fortuna con questi suggerimenti finora. – etsauer

1

Si potrebbe provare il programma expect che è disponibile come pacchetto per la maggior parte delle distribuzioni Linux. Utilizza un linguaggio di script semplice per alimentare programmi interattivi. Uno script di esempio può essere come questo:

#!/usr/bin/expect 
spawn passwordmanager 
expect "Enter password for testuser:" 
send "verysecret123" 

Questo script avrebbe detto expect per lanciare il programma passwordmanager, quindi attendere il prompt Enter password for testuser: e rispondere con verysecret123 e così via.

Problemi correlati