Connexion TCP, bash seulement
J'ai trouvé cette ligne dans un script. Bien que je comprenne globalement ce qu'il fait-ouvrir une connexion TCP bidirectionnelle -, j'ai besoin d'explications sur la syntaxe. Voici la ligne:
exec 5<>"/dev/tcp/${SERVER}/${PORT}"
Et mes questions:
-
<
et>
sont généralement utilisés pour rediriger IOs. Ce qui signifie-t-il là-bas? Est-il utilisable dans un autre contexte? Comment? - Pourquoi ça marche, alors que
/dev/tcp
n'existe pas? - Pourquoi 5? Peut-il être un autre numéro? Quelles sont les valeurs autorisées?
- pourquoi est-ce que
exec
est nécessaire? (étant donné que rien n'est fait exécuté)
Merci.
2 réponses
Sont généralement utilisés pour rediriger IOs. Ce qui signifie-t-il là-bas? Est-il utilisable dans un autre contexte? Comment?
C'est la même chose - l'entrée et la sortie sont redirigées vers fd 5.
Pourquoi cela fonctionne-t-il, alors que /dev / tcp n'existe pas?
C'est un fichier spécial: si host est un nom d'hôte ou une adresse internet valide, et port est un numéro de port entier ou un nom de service, bash tente d'ouvrir une connexion TCP au socket correspondant.
Pourquoi 5? Peut-il être un autre numéro? Quelles sont les valeurs autorisées?
Oui, cela peut être n'importe quelle valeur, mais vous devez vous assurer de ne pas utiliser un fd déjà utilisé.
Pourquoi exec est-il nécessaire? (étant donné que rien n'est réellement exécuté)
Exec signifie que la redirection se produit dans le shell actuel, pas dans un sous-shell.
Je ne peux répondre que pour la partie exec:
Exec sans une commande donnée peut être utilisé pour modifier les redirections d'E/S. dans ce cas signifie ouvert pour lecture + écriture. 5 est le numéro de canal (ou descripteur de fichier). Cela a du sens si d'autres commandes envoient leur sortie / lisent leur entrée depuis le canal 5.
Pour "/ dev / tcp / ${SERVER} / ${PORT} " Je ne sais pas si c'est une fonctionnalité d'une version Linux spécifique ou si c'est une fonctionnalité bash (je suppose que ce dernier).
-- EDIT: à partir du manuel bash page: --
Bash handles several filenames specially when they are used
in redirections, as described in the following table:
/dev/fd/fd
If fd is a valid integer, file descriptor fd is
duplicated.
/dev/stdin
File descriptor 0 is duplicated.
/dev/stdout
File descriptor 1 is duplicated.
/dev/stderr
File descriptor 2 is duplicated.
/dev/tcp/host/port
If host is a valid hostname or Internet address,
and port is an integer port number or service
name, bash attempts to open a TCP connection to
the corresponding socket.
/dev/udp/host/port
If host is a valid hostname or Internet address,
and port is an integer port number or service
name, bash attempts to open a UDP connection to
the corresponding socket.