Reindirizzare l'input dal codice o dal terminale al codice o terminale in esecuzione?


3

Attualmente sto usando uno script software che richiede un input continuo attraverso il terminale. Lo script valuta continuamente i file ricevendo l' input del percorso e valutando il file nel percorso.

L'obiettivo : è possibile eseguire uno script che richiede input passando l'input da un altro terminale o script.

Il software di valutazione carica molti dati prima di essere pronto per l'elaborazione, per questo preferirei mantenere il software in esecuzione e passare di tanto in tanto l'input. Invece di avviare il software e caricare tutti i dati richiesti (che richiede tempo).

Posso menzionare che ho provato a trovare tty :
$ /dev/pts/19
poi attraverso altri terminali esegui: $ <command> <myinput> > /dev/pts/19
dove il comando viene sostituito con 'echo / print'
Tuttavia, stampa solo nell'altro terminale, non funge da input per il software.

Risposte:


2

Crea una pipa denominata:

mkfifo pipe

Assicurati che non si chiuda (vedi questa risposta ):

exec 3<>pipe

Alimenta il tuo script dalla pipe:

<pipe your_script.sh
# or if you want to see incoming data
<pipe tee >(your_script.sh)

Quindi da un altro uso del terminale echo, printfo qualsiasi altra cosa:

echo "/some/path/or/another/input" > pipe

o

cat large_input.txt > pipe

o

script_that_generates_input.sh > pipe

Ma attenzione alle condizioni di gara! Non alimentare la pipa da due o più fonti contemporaneamente; attendere sempre che il comando di alimentazione corrente termini prima di eseguire il successivo. Nota se una fonte passa molti dati, può essere mantenuta a metà strada, fino a quando la parte ricevente non elabora i dati. Metti mbuffer(con argomenti che si adattano al tuo caso d'uso) prima your_script.shdi creare un buffer in grado di memorizzare più dati in entrata prima che qualsiasi comando di alimentazione venga messo in attesa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.