この質問の動機は、私が監視デバイスの機能をテストしていて、終了するまで何もせずに待たずにデバイスを開くことができるシェル組み込みコマンドがあるかどうか疑問に思うからです。
Echo/touch
ただ作業を行った直後にデバイスの電源を入れたり切ったりするようです。Cat
うまくいかないようです。
私はCアプリケーションを使用して同じことをしていますが、シェルスクリプトにこれに関するいくつかの条項があるかどうかを知りたいです。
答え1
Bourneシェルでは
exec 3< "$device"
シェルのファイル記述子3でデバイスを開きます。
これはCとほぼ同じです。
fd = open(device, O_RDONLY);
if (fd < 0) handler_error(...);
if (fd != 3) { dup2(fd, 3); close(fd); }
(また、対応するfdにksh93
1つを作成しました)。fcntl(3, F_SETFD, FD_CLOEXEC)
閉じるには:exec 3<&-
zsh
、ksh93
および では、bash
次fd = open(device, O_RDONLY)
のように作成することもできます。
exec {fd}< "$device"
ここで、ファイル記述子は9より大きい最初の自由記述子になります$fd
。
閉じるには:exec {fd}<&-
for、for、およびfor<
に置き換えます。>
O_WRONLY|O_CREAT|O_TRUNC
<>
O_RDWR|O_CREAT
>>
O_WRONLY|O_CREAT|O_APPEND
zsh
まだ一つあります。sysopen
内蔵(zsh/system
モジュール内)ここでフラグを正確に指定できます。
POSIX互換シェルでは、次のようにexec
なります。特殊内蔵、ファイルを開くことができない場合、非対話型(スクリプト終了)のときに致命的なエラーです。command
このコマンドを使用して無効にすることができます。
if command exec 3< "$device"; then
do-what-you-need-to-do
else
handle-the-error-yourself
fi
答え2
while sleep 3600; do :; done >/dev/your_watchdog
デバイスが書き込み専用モードで開かなければならないというecho
事実を(操作と失敗によって)収集しました。touch
cat