stdin/stderr redirections
Giorgos Keramidas
keramida at ceid.upatras.gr
Tue Jul 10 14:01:02 EEST 2007
On 2007-07-10 13:03, Nick Demou <ndemou at gmail.com> wrote:
> θέλω να κάνω το παρακάτω μπερδεμένο redirection του output μιας εντολής (CMD):
>
> - το stdout ΚΑΙ το stderr της εντολής CMD να πάει στο αρχείο
> OutPlusErr.out αλλά να γίνει και apend στο αρχείο grant.log
> - το stderr της εντολής CMD να πάει στο Err.out
>
> ιδέες (ή ένα καλό reference για το πως ακριβώς λειτουργούν τα > >> >&
> | tee κτλ πριν κάνω 2000 δοκιμές)?
Μπορείς να κάνεις 'dup' ένα file descriptor, π.χ. με:
exec 2>&3
αλλά δεν είναι εύκολο (χωρίς fork τουλάχιστον) να στείλεις το output
ενός file descriptor σε 2 file descriptors ταυτόχρονα.
Για παράδειγμα, μπορεί κάποιος αρχικά να σκεφτεί κάτι σαν:
#!/bin/sh
exec 2>&3 # dup2(stderr, fd[3])
exec > kot.out 2>&1 # redirect both stdout & stderr
exec 3> kot.err # redirect original stderr
αλλά αυτό, δυστυχώς, σημαίνει πως οι εντολές όπως:
echo foo >&2
δε θα στείλουν τίποτα στο fd 3 :-(
Θα χρειαστείς κάτι σαν fork() / pipe() και ένα child process που μπορεί
να στείλει το STDERR σε δυο μέρη ταυτόχρονα (δηλ. μια δική σου
mini-tee(1) σε Perl ή Python).
More information about the Linux-greek-users
mailing list