GCC skickar inte felmeddelanden till stdout?

Tråden skapades och har fått 7 svar. Det senaste inlägget skrevs .
1

Är det någon annan som stött på detta problem, och kanske vet om man kan göra något åt det?

Om jag anropar GCC och försöker fånga upp dess utdata på stdout, t.ex. genom att anropa på kommandorad och pipe'a till grep mm, eller > till fil, så händer ingenting! På kommandoraden kommer allt direkt i Terminalen vart jag än försöker skicka det.

Andra program funkar bra, och "gcc --help > help.txt" funkar, men kompilering av program skickar informationen någon annan väg. Vad kan man göra?

  • Medlem
  • Stockholm
  • 2006-10-22 09:33

Den skickar väl till stderr? Alla välskrivna UNIX-tools bör skilja ut felmeddelanden och skriva dem på stderr istället för stdout.

Du pipar stdout med > filnamn
stderr pipas med 2> filnamn
Du kan pipa stderr till vad stdout är just nu genom 2>&1

Tack! Jag trodde man skickade stderr med >>. Jag tror det gällde i den shell jag lärde mig för länge sedan, men det var ju inte bash. Då skall jag prova igen.

Fast > är inte pipe, det sparar på fil. Pipe är |. Stökig syntax, speciellt om man kan skicka stderr på stdout som du skrev sist.

  • Medlem
  • Mölndal
  • 2006-10-22 12:29

Följande gäller när du vill styra om stderr, till fil eller med pipe:

csh/ksh m fl:

gcc >& fil
gcc |& program

bash:

gcc 2>&1 > fil
gcc 2>&1 | program

>> används i de flesta shell för att lägga till i slutet på en existerande fil ("append").

Senast redigerat 2006-10-22 12:50

Toppen! Tackar! (Eftersom det gäller csh också så minns jag nog helt enkelt fel, vi använde nog inte stderr speciellt mycket.)

Vad man ska skicka till stdout eller stderr är en ganska öppen fråga. Det beror ju på vad man anser är "utdata". Just för kompilatorer är felmeddelanden inte precis ovanliga eller oväntade, utan under en stor del av arbetet den huvudsakliga utdatan man arbetar med. Det finns andra kompilatorer som skickar felmeddelandena på stdout.

  • Medlem
  • Mölndal
  • 2006-10-22 14:57

Det sista kan jag hålla med dig om. Om man ser en kompilators funktion som att "kontrollera och behandla källkod" så är ju felmeddelanden rörande t ex syntax naturlig utdata. Vissa typer av felmeddelanden, t ex en korrupt eller icke-existerande fil, tycker jag dock även för en kompilator ska ut på stderr.

Ursprungligen av memark:

Det sista kan jag hålla med dig om. Om man ser en kompilators funktion som att "kontrollera och behandla källkod" så är ju felmeddelanden rörande t ex syntax naturlig utdata. Vissa typer av felmeddelanden, t ex en korrupt eller icke-existerande fil, tycker jag dock även för en kompilator ska ut på stderr.

Sant! Då handlar det om fel i argumenten, det är klart rätt för stderr.

Om man kör xcodebuild tenderar den att generera gcc-kommandon på sisådär 10-15 rader, och har man sedan några hundra filer i projektet blir det en del output att kolla igenom. Då är det väldigt smidigt att pipea bort stdout till /dev/null och bara kika på stderr.

1
Bevaka tråden