[csh] Stderr redirecten in een perl-script

Pagina: 1
Acties:

  • BratMokstrof
  • Registratie: Mei 2003
  • Laatst online: 10-02 08:54
Ik draai Suse Linux, een ietwat verouderde versie, maar dat mag de pret niet drukken ;)

Ik wil een find uitvoeren die zoekt naar alle c en h files in het systeem. Als ik niet als root ben ingelogd, krijg ik onherroepelijk foutmeldingen dat ik bepaalde dirs niet in mag. Deze foutmeldingen wil ik kwijt.

In de Bash omgeving is dat volgens mij heel simpel, maar in CSHRC krijg ik het niet voor elkaar...

Tevens wil ik eigenlijk een oplossing die werkt in een willekeurige shell, het moet worden ingebed in een Perl script waarvan ik niet precies weet in welke shell(s) het gaat draaien.

Is dit mogelijk?
Zo ja: hoe? ;)

  • igmar
  • Registratie: April 2000
  • Laatst online: 31-01 23:50

igmar

ISO20022

BratMokstrof schreef op dinsdag 12 april 2005 @ 12:55:
Ik wil een find uitvoeren die zoekt naar alle c en h files in het systeem. Als ik niet als root ben ingelogd, krijg ik onherroepelijk foutmeldingen dat ik bepaalde dirs niet in mag. Deze foutmeldingen wil ik kwijt.
De foutmeldingen gaan naar stderr. Die moet je dus zien af te vangen :

find . blahblah 2>/dev/null

Dat zal in andere shells wel op een vergelijkbare manier gaan.

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Ik verander je topictitel even, CSHRC is bij mijn weten geen shell namelijk, csh wel. En zoek je nou een perl-oplossing, of een shell-oplossing? Een oplossing voor een shell lijkt me niet zo nuttig als je een perlscript aan het maken bent. Maar echt een manier die met elke shell werkt is er bij mijn weten niet, wat je wel kunt doen is als je find aanroept vanuit perl, expliciet opgeven dat het in /bin/sh gedraaid moet worden en dan zorgen dat je redirection compatible is met de bourne shell, maar echt duidelijk over hoe je wat en waar aanroept ben je niet dus het is wat gokken.

  • BratMokstrof
  • Registratie: Mei 2003
  • Laatst online: 10-02 08:54
Dat 2>/dev/null werkt dus alleen als je in bash zit, niet als je in csh zit...

Verder thnx voor de aanpassing, lijkt me beter zo ;)
Maar hoe dan ook, vanuit mijn Perl-script heb ik het statement
code:
1
system "find $_[0] -iname \"*.c\" -o -iname \"*.h\" > .tmp.out";


Dat print alle dingen die ik wil hebben in die file, maar tevens de errors op mijn scherm. Geen ramp van wereldformaat, maar ik schakel ze liever uit.

De ellende is dat hij ze niet naar de file schrijft -- dan kan ik ze er handmatig uitvissen ...

Om die reden zoek ik dus ook een shell / find oplossing en geen Perl oplossing (of denk ik verkeerd?)

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Je kunt een klein shellscriptje maken:
code:
1
2
#!/bin/sh
./jouwperlscript.pl 2>/dev/null
maar dat is niet echt mooi en dan heb je altijd 2 files nodig :)
Wat misschien al beter is, is find niet rechtstreeks met system aanroepen, maar sh -c "find blabla 2>/dev/null" aanroepen met system.
Het kan ook prima zijn dat perl al een ingebouwd iets heeft voor het afvangen van stderr uit system-dingen, maar dat weet ik zo niet uit mn hoofd :)

  • BratMokstrof
  • Registratie: Mei 2003
  • Laatst online: 10-02 08:54
Perfect, dat laatste deed het hem ;D

Wat doet dit? Zet het hem tijdelijk even op bash ofzo? :)

Thanks in elk geval!

  • lordgandalf
  • Registratie: Februari 2002
  • Laatst online: 11-02 15:03
sh = bash shell
-c = commando uuitvoeren
en "find blabla" is find uitvoern om te zoeken naar blabla
en 2>/dev/null is stuur alle errors naar de bit hell :P:P:P:P ofwel gooi alle errors weg

Steam: Profile / Socialclub: Profile / Uplay: minedwarf / Origin: lordgandalf3


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Niet helemaal, bash is een afgeleide van en in zekere zin een uitbreiding op de bourne shell, die meestal sh heet. Op linux is het meestal zo dat /bin/sh een kopie of een link naar bash is, maar daarin is linux een uitzondering, op bijna alle unix-besturingssystemen is er wel een aparte bourne shell. Scripts die onder bash werken, zullen dus niet zonder meer met elke /bin/sh werken, het is dus af te raden #!/bin/sh boven je scripts te zetten als je eigenlijk een bash-script aan het maken bent :)

  • lordgandalf
  • Registratie: Februari 2002
  • Laatst online: 11-02 15:03
ja okee maar meestal speelt bash voor sh dus vandaar dat ik het zo heb neer gezet.

Steam: Profile / Socialclub: Profile / Uplay: minedwarf / Origin: lordgandalf3

Pagina: 1