2013-02-12 5 views
9

Ho un eseguibile che viene utilizzato in un modo come la seguente:utilizzando una variabile Bash al posto di un file come input per un eseguibile

executable -v -i inputFile.txt -o outputFile.eps 

Al fine di essere più efficienti, voglio usare una variabile Bash al posto del file di input. Quindi, voglio fare qualcosa di simile al seguente:

executable -v -i ["${inputData}"] -o outputFile.eps 

Qui, le parentesi quadre rappresentano un codice intelligente.

Sei a conoscenza di qualche trucco che mi permetterebbe di canalizzare le informazioni nell'eseguibile descritto in questo modo?

Molte grazie per il vostro aiuto

+0

Non è chiaro cosa vuoi che succeda. Come, qual è il valore di inputData? – hyde

+1

"$ {inputData}" è semplice, dati ASCII che voglio "impacchettare" come un file senza utilizzare effettivamente un file (che potrebbe dover essere memorizzato nella memoria non volatile). L'utente mikyra suggerisce un approccio che implica la sostituzione del processo, che ritengo sia esattamente ciò di cui ho bisogno. Grazie per l'aiuto. – d3pd

+0

Ah, ora ho capito ... Cool, non lo sapevo. Apparentemente è una funzione * bash *, non supportata da plain * sh * o * dash *, quindi meglio ricordare di usare '#!/Bin/bash' quando si usa quello in uno script. + 1 + 1 – hyde

risposta

19

È possibile utilizzare il costrutto

<(command) 

avere bash creare una FIFO con uscita comandi per voi. Quindi, basta provare:

-i <(echo "$inputData") 
+1

Questa sostituzione di processo è esattamente ciò di cui ho bisogno. Grazie mille per l'assistenza! – d3pd

+0

Ho incontrato qualche comando che ha bisogno di cercare il file di input, dove fifo pipe non funziona. Zsh ha a =() implementato come un file temporaneo, che funziona bene. – misssprite

+1

https://www.gnu.org/software/bash/manual/bash.html#Process-Substitution vale la pena leggere questa sezione –

0

Supponendo che il nome del file eseguibile è exec e il nome della variabile definita è x e si desidera passare il valore di x come input per l'eseguibile. Poi fare questo:

$ echo $x > stdin && ./exec < stdin 

questo farà il lavoro

-1
executable -v -i <<<"${inputData}" -o outputFile.eps 

farà il trucco in bash.

+1

La stringa qui '<<<' indirizza la stringa allo standard input del comando. Non mette nulla sulla riga di comando, e non lo fa apparire come un file da leggere. – ilkkachu