Ce qui a inspiré cette question, c'est que je teste la fonctionnalité de l'appareil de surveillance et je pensais s'il y avait une commande intégrée au shell pour simplement ouvrir l'appareil et ne rien faire/attendre jusqu'à la fin ?Echo/touch
semblent simplement ouvrir et fermer l'appareil immédiatement après avoir effectué l'opération. Cat
ne semble pas fonctionner.
J'utilise une application C pour faire la même chose, mais je me demandais si le script shell avait des dispositions pour cela
Réponse acceptée :
Dans les coquilles de type Bourne,
exec 3< "$device"
Ouvre le périphérique sur le descripteur de fichier 3 du shell.
Cela équivaudrait plus ou moins à des C :
fd = open(device, O_RDONLY);
if (fd < 0) handler_error(...);
if (fd != 3) { dup2(fd, 3); close(fd); }
(ksh93
fait aussi un fcntl(3, F_SETFD, FD_CLOEXEC)
sur ce fd).
Pour le fermer :exec 3<&-
En zsh
, ksh93
et bash
, l'équivalent de fd = open(device, O_RDONLY)
peut aussi s'écrire :
exec {fd}< "$device"
Où le descripteur de fichier serait le premier libre au-dessus de 9 et stocké dans $fd
.
Pour le fermer :exec {fd}<&-
Remplacer <
avec >
pour O_WRONLY|O_CREAT|O_TRUNC
, et avec <>
pour O_RDWR|O_CREAT
et >>
pour O_WRONLY|O_CREAT|O_APPEND
.
zsh
a aussi un sysopen
intégré (dans le zsh/system
module) où vous pouvez spécifier exactement les drapeaux.
Notez que dans les shells compatibles POSIX, exec
étant un intégré spécial , si le fichier ne peut pas être ouvert, c'est une erreur fatale lorsqu'il n'est pas interactif (il quitte le script). Vous pouvez désactiver cela en utilisant la command
commande.
if command exec 3< "$device"; then
do-what-you-need-to-do
else
handle-the-error-yourself
fi