2012-03-26 10 views

risposta

5

Credo xargs è la cosa più vicina alla vostra ipotetica map:

cat nums | xargs -n1 ./myscript 

o

cat nums | xargs -n1 -J ARG ./myscript ARG 

o

cat nums | xargs -I ARG ./myscript ARG 

Purtroppo, xargs non lascia si richiama cose che leggi da stdin, quindi avresti riscrivere il tuo script per accettare un argomento da riga di comando piuttosto che leggere da stdin.

+0

In particolare, ho un file di testo in cui la maggior parte delle linee sono indirizzi IP, e per ognuna, voglio eseguire un comando wget e sostituire quella riga di testo con il testo di risposta di wget. –

+0

Ah, fantastico! Non sapevo che si potesse usare l'opzione '-n1' per limitare il numero di argomenti per riga. –

+0

Si potrebbe anche voler vedere GNU parallel, che non è un'utilità UNIX standard, ma è simile a 'xargs': http://en.wikipedia.org/wiki/Parallel_(software) –

0

È possibile utilizzare uno script bash per fare questo. Qualcosa del tipo:

#!/bin/bash 

string="| ./myscript" 

echo "9534 $string" 
echo "2343 $string" 
echo "1093 $string" 
echo "7023 $string" 

Oppure, si potrebbe facilmente riempire un array con i propri valori numerici e fare tutto questo in un unico ciclo.

+0

Lo so, ma speravo in un modo di analizzare per riga. –

+0

So che c'erano vecchi giochi da riga di comando basati su testo che facevano qualcosa di simile a ciò di cui si sta parlando. Inoltre, suppongo, VI ed EMACS devono essere in grado di fare ciò che vuoi. – theJollySin

3
#!/bin/bash 
while read -r line 
do 
    "[email protected]" <<< "$line" 
done 
+0

Infatti, uno script semplice sarebbe fai quello di cui sto parlando Ero curioso, però, se esiste un'utilità da riga di comando. –

Problemi correlati