Não tenho certeza se devo interpretar /dev/tcp/localhost/9999
como um inteiro (descritor de arquivo) ou como um nome de arquivo.
Consequentemente, não tenho certeza se a seção " Redirecionando a saída padrão e o erro padrão " (1) ou a seção " Duplicando descritores de arquivo " (2) do manual do Bash se aplica ao redirecionamento acima.
O redirecionamento funciona tanto se n
for especificado ou não, mas (1) não recebe um n
argumento, implicando que (1) não é usado?
Além disso, se /dev/tcp/localhost/9999
é considerado um nome de arquivo (não um número inteiro), por que o <&1
comando a seguir funciona?:
/bin/bash >&/dev/tcp/localhost/9999 <&1
Nesse caso, 1
(stdout) não é um descritor de arquivo aberto para falha de entrada (2)?
/dev/tcp/host/port
sempre será aberto como leitura/gravação, não importa se você usa<
,>
ou<>
(e>&
ou&>
embash
).>& /dev/tcp/host/port
irá se conectarhost:port
e redirecionar tanto o stdout quanto o stderr para ele.O
/dev/tcp
hack usasocket(2)
econnect(2)
nos bastidores e não há uma maneira óbvia e consistente de usar um soquete tcp como se fosse um descritor de arquivo aberto apenas para leitura ou gravação.E um descritor de arquivo simplesmente sendo o número 1 e chamando a si mesmo de stdout não significa que não esteja aberto para entrada:
cat <&1
também funciona no terminal.Aqui não.