Wie kann ich das Linux-Terminal verwenden, um nur Teile der mit harten Zeichenfolgen verketteten Programmeingänge zu pfeifen?

393
the_endian

Ich verstehe, dass ich Xargs so verwenden kann:

echo "-i inputfile.raw -o outputfile.jpg" | xargs -t ./myprogram

Ich teste die Anwendung jedoch fuzz und ich habe einen Fuzzer, der so funktioniert:

echo "some text" | myfuzzer Ausgabe: "@ om3 t9gxt"

Mit anderen Worten, mein Fuzzer nimmt einen String und führt einige Permutationen darauf aus und gibt dann eine randomisierte Version davon aus.

Der Trick ist, ich muss "-i inputfile.raw -o outputfile.jpg" DURCH myfuzzer umleiten, so dass es mutiert ist, ABER ich muss die Teile -o, -i, .raw und .jpg behalten. Und schließlich die Ausgabe wie folgt an mein Programm übergeben:

echo "-i inpu$@tfifsa4le.raw -o outpuF$tfFAFAile.jpg" | xargs -t ./myprogram

Ich brauche also einen Weg, um anzugeben, dass nur die Dateinamen durch myfuzzer geleitet werden sollen, nicht aber die zuvor genannten Erweiterungen und Flags. Andernfalls werden sie auch permutiert und mein Programm erkennt die Argumente nur, wenn sie die richtigen Flags und Erweiterungen haben ... aber rekonstruieren Sie immer noch eine Zeichenfolge, um sie in mein Programm aufzunehmen.

Wie mache ich das mit Bash?

1
Was halten Sie davon, die unveränderlichen Teile als zitierte Zeichenfolgen zu verwenden und diejenigen zu ersetzen, die als Befehlsersatz ersetzt werden müssen? ZB "-i" `echo inputfile | myfuzzer` ".raw -o" ... dsstorefile1 vor 6 Jahren 0

1 Antwort auf die Frage

1
Felix Palmen

Sie könnten zum Beispiel readin einer Sub-Shell verwenden

echo "inputfile outputfile" | myfuzzer | (read -a arg; echo "-i $.raw -o $.jpg" )