Gibt es einen Befehl, den Sie in einem Shell-Skript ausführen können, das erkennt, ob die CD-Schublade offen oder geschlossen ist, und 1 oder 0 zurückgibt, je nachdem, ob dies der Fall war (oder etwas, das leicht zu interpretieren ist)?
Derzeit führe ich den open-Befehl aus und messe, wie lange die Ausführung dauert. Wenn es fast augenblicklich ist, ist es offen. Wenn es dauert, war es offen und ist jetzt geschlossen.
Ich hätte gerne eine Methode, bei der der aktuelle Zustand nicht geändert, sondern nur erkannt wird.
Akzeptierte Antwort:
Ich habe hier eine nette kleine Lösung gefunden. Der folgende C-Code, der gegenüber der verlinkten Site minimal geändert wurde, gibt einen Exit-Code von zurück wenn das Fach geöffnet ist und
1
wenn nicht.
Speichern Sie diesen Code also als etwas (z. B. foo.c
) und kompilieren Sie es mit diesem Befehl:
gcc -o trayopen foo.c
Kopieren Sie dann die kompilierte ausführbare Datei trayopen
nach /usr/bin
:
sudo cp trayopen /usr/bin
Sie sollten nicht in der Lage sein, Dinge wie
zu tuntrayopen /dev/sr0 && echo closed
Oder, vollständiger:
#!/bin/sh
if trayopen /dev/sr0
then
echo "Tray is open."
else
echo "Tray is closed."
fi
Der Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/cdrom.h>
int main(int argc,char **argv) {
int cdrom;
int status=1;
if (! argv[1] ){
printf("Usage : trayopen [device]\n");
printf("Result: Returns a 0 if the tray was open and 1 if it was closed\n");
exit(2);
}
if ((cdrom = open(argv[1],O_RDONLY | O_NONBLOCK)) < 0) {
printf("Unable to open device %s. Provide a device name (/dev/sr0, /dev/cdrom) as a parameter.\n",argv[1]);
exit(2);
}
/* Check CD tray status */
if (ioctl(cdrom,CDROM_DRIVE_STATUS) == CDS_TRAY_OPEN) {
status=0;
}
close(cdrom);
exit(status);
}