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