$ cat foo foo bar
Ora, se faccio:
$ some_program foo
Sta funzionando.
Ma se provo:
$ cat foo | some_program
La sua non funziona.
Sto cercando un modo pulito per l'input di pipe a some_program
senza wherer utilizzare file temporanei disordinati.
La piping metterà lo stdout del some_program
in some_program
stdin di some_program
. In questo caso some_program
si aspetta un argomento, non stdin, quindi vuoi memorizzare il risultato di un cat foo
in una variabile e quindi call una variabile some_program $variable
.
Non sono troppo sicuro di script di bash, ma provare questo?
bar=`cat foo` some_program $bar
In realtà, forse questo functionrà …
some_program `cat foo`
In bash puoi utilizzare la sostituzione del process
$ some_program <(cat foo)
È ansible aggiungere il maggior numero di parametri che ti piace in questo modo, a patto che sappiate che questi parametri saranno nomi di file che verranno solo letti. Non è ansible leggere e scrivere contemporaneamente.
Oltre al modo @Bob proposto, c'è un altro metodo più flessibile: xargs
:
Potresti usare
cat foo | xargs some_program
che è fondamentalmente equivalente di
some_program `cat foo`
Se il programma prevede solo un argomento alla volta, puoi farlo
cat foo | xargs -n 1 some_program
E some_program
saranno chiamati una volta per each linea di input.
Ci sono molte altre opzioni per xargs
, come una gestione attenta dei nomi di file "cattivi" (con spazi e altri caratteri speciali), limitando il numero di processi in esecuzione contemporanea, ecc., Che potrebbero essere trovati in man-page.