Um shell interativo é o comportamento padrão quando stdin e stderr do bash são conectados a dispositivos terminais, conforme detectado pela função isatty()
ou algum equivalente. Se você está digitando algo nele localmente e não está passando por um canal (por exemplo, cat | bash
), é um TTY e interativo é o padrão. Quando você redireciona de um soquete, ele não é um TTY e requer que o sinalizador entre no modo interativo.
Quando você redireciona para ou de /dev/tcp/<ip>/<port>
, não está realmente usando um arquivo em /dev
. (Se você tentar ls /dev/tcp
, você obtém No such file or directory.
) Esta é realmente uma sintaxe especial aceita por bash
, o que faz com que ele abra um soquete para o dado ip
e port
em vez de executar um arquivo local aberto . E os soquetes não têm modos de "leitura" ou "gravação" da mesma forma que os arquivos, então a sintaxe 0<&1
e 0>&1
é equivalente quando o fd 1 é um soquete.