shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

redirecionamento para intermediarios


From: Ivan lopes
Subject: redirecionamento para intermediarios
Date: Mon, 1 Oct 2007 20:51:32 -0300

vamos complicar um pouco ...

$ ls  -d /usr /usa
ls: /usa: No such file or directory
/usr/

repare que tivemos dois tipos de saidas, uma
conduzida pelo stdout, outra pelo stderr

vejamos:

# FD 2 ligado a arquivo
$ ls  -d /usr /usa 2> a.txt
/usr/
$ cat a.txt
ls: /usa: No such file or directory

# FD 1 ligado a arquivo
$ ls  -d /usr /usa 1> a.txt
ls: /usa: No such file or directory
$ cat a.txt
/usr/

vamos fazer copias ... isso mesmo xerocar ...  na
verdade nem uma coisa nem outra, sao copias de atribuicoes
...

# FD 2 vai funcionar igual ao FD 1
# FD 2 recebe as atribuicoes de FD 1 ...
$ ls  -d /usr /usa 2>&1 | tee a.txt
ls: /usa: No such file or directory
/usr/

# repare que tanto FD 1 quanto FD 2 passaram pelo pipe.
$ cat a.txt
ls: /usa: No such file or directory
/usr/

... veja a diferenca agora ...

$ ls  -d /usr /usa | tee a.txt
ls: /usa: No such file or directory
/usr/
# domente FD 1 passou pelo pipe.
$ cat a.txt
/usr/

# FD 1 vai funcionar igual ao FD 2
# FD 1 recebe as atribuicoes de FD 2 ...
$ ls  -d /usr /usa 1>&2 | tee a.txt
ls: /usa: No such file or directory
/usr/
# tanto Fd 1 quanto FD 2 foram barrados ...
$ cat a.txt
vazio zzzz

# Agora vou fechar FD1
$ ls  -d /usr /usa >&-
ls: /usa: No such file or directory
ls: write error: Bad file descriptor

# Fechando FD1 e FD2
$ ls  -d /usr /usa >&- 2>&-
repare que o erro encadeado de FD1 foi para FD2.

# Fechando FD2
$ ls  -d /usr /usa  2>&-
/usr/

# FD2 com as caracteristicas de FD1
$ ls -d /usa /usr 2>&1
ls: /usa: No such file or directory
/usr/

# FD2 com as caracteristicas de FD1 e
# mostre apenas os erros.
$ ls -d /usa /usr 2>&1 1>&-
ls: /usa: No such file or directory
ls: write error: Bad file descriptor

# FD2 com as caracteristicas de FD1,
# mostre apenas os erros e troque e por a.
$ ls -d /usa /usr 2>&1 1>&- | tr e a
ls: /usa: No such fila or diractory
ls: writa arror: Bad fila dascriptor


==================================
= Esqueca tudo e decore o Macete =
= MACETE                         =
* O FD 2 nao passa o pipe.
* '<-' sinal de recebe.
==================================

a) Ninguem pode atravessar o pipe ...

FD1 <- FD2 # FD1 recebe FD2, isto eh, FD1 nao
           # atravesse o pipe, igual ao FD2.

$ ls -d /usa /usr 1>&2 | sed 's/^/passou-> /'
ls: /usa: No such file or directory
/usr/


b) Somente o erro pode atravessar o pipe.
FD3 <- FD2  # FD3 nao atravessa
FD2 <- FD1  # FD2 atravessa
FD1 <- FD3  # FD1 nao atravessa, pq FD3 tb nao.
FD3 trancado.

$ ls -d /usa /usr 3>&2 2>&1 1>&3 3>&- | sed 's/^/passou-> /'
passou-> ls: /usa: No such file or directory
/usr/

c) somente o stdout pode atravessar o pipe.
$ ls -d /usa /usr | sed 's/^/passou-> /'
ls: /usa: No such file or directory
passou-> /usr/


e) Ninguem pode atravessar o pipe ... ou ser impresso
FD1 <- FD2
FD1 trancado
FD2 trancado

ls -d /usa /usr 1>&2 1>&-  2>&- | sed 's/^/passou-> /'



-- 
[ ]'s
Ivan Carlos Da Silva Lopes

Engenheiro Eletronico e Computacao
UFRJ


reply via email to

[Prev in Thread] Current Thread [Next in Thread]