2017-12-17 7 views
0

Ich habe aus Antworten unter dieser Frage gelernt: Making xargs work in Cygwin diese Option xargs -I funktioniert nicht ordnungsgemäß unter Cygwin. Es gab einige Problemumgehungen, aber leider hilft es in meinem Fall nicht.xargs -I% command -option1% -option2% unter cygwin

Meine Frage ist, wie kann ich das gleiche Ergebnis wie nähern:

..somthing that produces multiple lines.. | xargs -I % command -option1 % -option2 % 

unter Cygwin-Umgebung?

Edit:

Um zu klären, Ich möchte einige Werte von stdin erhalten und den „Befehl“ aufrufen, sie in zwei Orte als Argumente „%“ setzen. Ich möchte meinen Befehl mehrmals auf Daten anwenden, die von "etwas" erzeugt werden.

Beispiel 1: (ich habe für eine große Zeit in CPP-Programmierung so nicht verzeihen mir bitte Fehler)

find -name *.cpp | cut -d. -f1 | xargs -I % gcc -o %.o -I %.h %.cpp 

Beispiel 2:

cat songs_to_process.txt | xargs -I % convert --format=mp3 --source=%.avi --output=%.mp3 
+0

Ihre Frage ist unklar. Was soll mit jeder Zeile der Ausgabe passieren? – choroba

+0

@choroba Ich habe meine Frage bearbeitet, danke, dass Sie eine Notiz gemacht haben. – mpasko256

+1

Welche Version von Cygwin hast du? Welchen Fehler bekommst du? – choroba

Antwort

2

Sie brauchen nicht xargs für diesen Job überhaupt - nicht in beliebig Ihrer Beispiele.

find . -name '*.cpp' -print0 | while IFS= read -r -d '' filename; do 
    basename=${filename%.*} 
    gcc -o "${basename}.o" -I "${basename}.h" "${basename}.cpp" 
done 

... oder:

while IFS= read -r song; do 
    song=${song%$'\r'} # repair if your input file is in DOS (CRLF) format 
    convert --format=mp3 --source="$song".avi --output="$song".mp3 
done <songs_to_process.txt 

Siehe BashFAQ #1 für eine Einführung in Best Practices für die Verarbeitung von Eingaben line-by-line in bash.

Verwandte Themen