Lo que inspiró esta pregunta es que estoy probando la funcionalidad del dispositivo de vigilancia y estaba pensando si hay un comando incorporado de shell para simplemente abrir el dispositivo y no hacer nada/esperar hasta que termine.Echo/touch parece que simplemente abre y cierra el dispositivo inmediatamente después de realizar la operación. Cat no parece funcionar.
Estoy usando una aplicación C para hacer lo mismo, pero me preguntaba si el script de shell tiene alguna disposición para ello
Respuesta aceptada:
En caparazones tipo Bourne,
exec 3< "$device"
Abre el dispositivo en el descriptor de archivo 3 del shell.
Eso sería más o menos equivalente a C:
fd = open(device, O_RDONLY);
if (fd < 0) handler_error(...);
if (fd != 3) { dup2(fd, 3); close(fd); }
(ksh93 también hace un fcntl(3, F_SETFD, FD_CLOEXEC) en ese fd).
Para cerrarlo:exec 3<&-
En zsh , ksh93 y bash , el equivalente de fd = open(device, O_RDONLY) también podría escribirse como:
exec {fd}< "$device"
Donde el descriptor de archivo sería el primero libre arriba de 9 y almacenado en $fd .
Para cerrarlo:exec {fd}<&-
Reemplazar < con > para O_WRONLY|O_CREAT|O_TRUNC , y con <> para O_RDWR|O_CREAT y >> para O_WRONLY|O_CREAT|O_APPEND .
zsh también tiene un sysopen integrado (en el zsh/system módulo) donde puede especificar las banderas exactamente.
Tenga en cuenta que en los shells compatibles con POSIX, exec ser un construido especial , si el archivo no se puede abrir, es un error fatal cuando no es interactivo (sale del script). Puede deshabilitarlo usando el command comando.
if command exec 3< "$device"; then
do-what-you-need-to-do
else
handle-the-error-yourself
fi