2009-10-13 20 views
7

Ho un programma (che non ho scritto) che non è progettato per leggere i comandi da un file. Immettere comandi su STDIN è piuttosto noioso, quindi mi piacerebbe essere in grado di automatizzarlo scrivendo i comandi in un file per riutilizzarli. Il problema è che, se il programma raggiunge EOF, il ciclo si interrompe all'infinito cercando di leggere nel prossimo comando lasciando cadere un infinito torrent di opzioni di menu sullo schermo.Passa dal contenuto del file a STDIN nel comando pipe? (Linux Shell)

Quello che mi piacerebbe essere in grado di fare è cat un file contenente i comandi nel programma tramite una pipe, quindi utilizzare una sorta di shell magica per farlo passare dal file a STDIN quando colpisce EOF del file .

Nota: ho già considerato l'utilizzo di cat con '-' per STDIN. Sfortunatamente (non lo sapevo prima), i comandi di piping attendono che l'uscita del primo programma si interrompa prima di avviare il secondo programma - non vengono eseguiti in parallelo. Se c'è un modo per far funzionare i programmi in parallelo con quel tipo di azione di piping, funzionerebbe!

Qualche idea? Grazie per l'assistenza!

EDIT:

Vorrei sottolineare che il mio obiettivo non è solo per evitare che il sistema da colpire la fine del file comandi. Mi piacerebbe poter continuare a digitare i comandi dalla tastiera quando il file raggiunge EOF.

risposta

15

vorrei fare qualcosa di simile

 
(cat your_file_with_commands; cat) | sh your_script 

questo modo, quando il file con i comandi è fatto, il secondo cat sarà alimentare il vostro script con tutto ciò che si digita sulla stdin dopo.

+2

È possibile * farlo? * Non avevo idea che potessi raggruppare i comandi. Questo è il mio qualcosa di nuovo per il giorno. Questo mi impedisce di dover usare una seconda finestra - grazie molto, Idelic! – zslayton

+0

Per coloro che sono interessati, puoi creare il file contenente i comandi mentre usi: (cat your_file_with_commands; tee -a your_file_with_commands) | sh your_script che aggiungerà ogni comando al file oltre a passarlo allo script tramite la pipe. – zslayton

+0

+1 Questo mi ha aiutato su level1 del warname di narnia su intruded.net – chmeee

1

Avete provato a utilizzare qualcosa come tail -f commandfile | command Penso che dovrebbe pipe le righe del file per il comando senza chiudere il descrittore di file in seguito. Utilizzare -n per specificare il numero di linee da convogliare se tail -f non le cattura tutte.

+0

che sia una buona idea, ma purtroppo non mi permette di continuare a digitare i comandi dopo che il file è stato completato. (Dovrei essere più chiaro su questo nel mio post - lo modificherò.) Se si digita 'tail -f commandfile -' per provare a farlo passare a STDIN dopo aver letto il file, si lamenta: avviso : seguire l'input standard indefinitamente è inefficace Grazie per il pensiero, però! – zslayton

+1

Hai provato ad aggiungere linee al file usando 'echo something >> commandfile'? 'tail -f' dovrebbe tracciare anche quelle aggiunte. –

+0

Ha! Stavo * solo * provandolo. Commenterò di nuovo se funziona. (Il programma impiega un po 'per iniziare.) – zslayton

2

Penso che expect funzionerebbe per questo.

2

Uguale Idelic risposta con sintassi più semplice;)

cat your_file_with_commands - | sh your_script 
Problemi correlati