Skip to content
Joachim Ansorg edited this page Nov 12, 2021 · 2 revisions

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

Related resources:

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

ShellCheck

Each individual ShellCheck warning has its own wiki page like S001. Use GitHub "Pages" feature above to find a specific one, or see Checks.

Clone this wiki locally