2 SC3025
Joachim Ansorg edited this page 2021-11-12 20:01:59 +01:00

In POSIX sh, /dev/{tcp,udp} is undefined.

(or "In dash, ... is not supported." when using dash)

Problematic code:

echo foo > /dev/tcp/myhost/1234

Correct code:

Rewrite using a tool like netcat (nc):

echo foo | nc myhost 1234

Rationale:

/dev/tcp/$host/$port and /dev/udp/$host/$port are recognized in redirections by bash and ksh, and a socket connection is made instead of opening a file. They do not physically exist in /dev.

POSIX sh and dash do not support this, so any such code should be rewritten to use a socket tool explicitly. The obvious candidate is netcat aka nc.

Exceptions:

None

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!