Apa yang mengilhami pertanyaan ini adalah bahwa saya sedang menguji fungsionalitas perangkat pengawas dan saya berpikir jika ada perintah bawaan shell untuk membuka perangkat dan tidak melakukan apa pun/menunggu sampai dihentikan?Echo/touch tampaknya hanya membuka dan menutup perangkat segera setelah melakukan operasi. Cat sepertinya tidak berhasil.
Saya menggunakan aplikasi C untuk melakukan hal yang sama tetapi bertanya-tanya apakah skrip shell memiliki beberapa ketentuan untuk itu
Jawaban yang Diterima:
Dalam cangkang mirip Bourne,
exec 3< "$device"
Membuka perangkat pada deskriptor file 3 dari shell.
Itu kurang lebih setara dengan C:
fd = open(device, O_RDONLY);
if (fd < 0) handler_error(...);
if (fd != 3) { dup2(fd, 3); close(fd); }
(ksh93 juga melakukan fcntl(3, F_SETFD, FD_CLOEXEC) di fd itu).
Untuk menutupnya:exec 3<&-
Dalam zsh , ksh93 dan bash , setara dengan fd = open(device, O_RDONLY) dapat juga ditulis sebagai:
exec {fd}< "$device"
Di mana deskriptor file akan menjadi yang pertama gratis di atas 9 dan disimpan di $fd .
Untuk menutupnya:exec {fd}<&-
Ganti < dengan > untuk O_WRONLY|O_CREAT|O_TRUNC , dan dengan < untuk O_RDWR|O_CREAT dan >> untuk O_WRONLY|O_CREAT|O_APPEND .
zsh juga memiliki sysopen bawaan (dalam zsh/system module) di mana Anda dapat menentukan flag dengan tepat.
Perhatikan bahwa dalam shell yang sesuai dengan POSIX, exec menjadi bawaan khusus , jika file tidak dapat dibuka, itu adalah kesalahan fatal ketika non-interaktif (keluar dari skrip). Anda dapat menonaktifkannya dengan menggunakan command perintah.
if command exec 3< "$device"; then
do-what-you-need-to-do
else
handle-the-error-yourself
fi