Avatar billede karas Nybegynder
23. juni 2009 - 17:19 Der er 2 kommentarer og
1 løsning

Linux shell: Hvordan pipe's stderr til stdin?

Hvordan pipe'er jeg stderr fra 'appl1' til stdin på 'appl2' uden at stdout kommer med?

appl1 skriver både til stdout og stderr, men jeg ønsker kun at pipe stderr til appl2's stdin.

Ingen af følgende løsninger virker:

A) appl1 1> /dev/null | appl2

B) appl1 1> /dev/null 2>&1 | appl2
Avatar billede martinbk Nybegynder
23. juni 2009 - 17:56 #1
dit første forslag piper outputtet på stdout til appl2, men eftersom du har redirected stdout til /dev/null kommer der aldrig noget

dit 2. forslag redirecter først stdout til /dev/null og derefter redirecter du stderr til stdout, som jo er i et sort hul

2 (stderr) > &1 (stdout)

dette burde virke appl 1>/dev/null 2> /din/appl2
Avatar billede martinbk Nybegynder
23. juni 2009 - 18:39 #2
eller hov ved nærmere eftertanke, nej du skal nok ikke forsøge på ovennævnte måde, det vil blot overskrive din applikation, tanketorsk fra min side
Avatar billede karas Nybegynder
24. juni 2009 - 19:03 #3
Har fundet løsningen:

exec 3>&1 ; appl1 2>&1 1>&3 3>&- | appl2 ; exec 3>&-

Hvis man ønsker at filtrere appl1.stdout helt væk (med ovenstående printes det til skærmen), så kan man gøre følgende:

exec 3>&1 ; appl1 2>&1 1> /dev/null 3>&- | appl2 ; exec 3>&-
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester