この質問に影響を与えたのは、ウォッチドッグデバイスの機能をテストしていて、デバイスを開いて何もしない/終了するまで待つシェル組み込みコマンドがあるかどうかを考えていたということです。エコー/タッチコード> 操作を実行した直後にデバイスを開閉しているように見えます。 Cat 動作していないようです。
私はCアプリケーションを使用して同じことを行っていますが、シェルスクリプトに何らかのプロビジョニングがあるかどうか疑問に思っていました
承認された回答:
ボーンのようなシェルでは、
exec 3< "$device"
シェルのファイル記述子3でデバイスを開きます。
それは多かれ少なかれCと同等です:
fd = open(device, O_RDONLY);
if (fd < 0) handler_error(...);
if (fd != 3) { dup2(fd, 3); close(fd); }
( ksh93 fcntl(3、F_SETFD、FD_CLOEXEC)も実行します そのfdで)。
閉じるには: exec 3 <&-
zshで 、 ksh93 およびbash 、 fd =open(device、O_RDONLY)と同等 次のように書くこともできます:
exec {fd}< "$device"
ファイル記述子は、9を超える最初の空きファイル記述子であり、 $ fdに格納されます。 。
閉じるには: exec {fd} <&-
<を置き換えます >を使用 O_WRONLY | O_CREAT | O_TRUNCの場合 、および <> O_RDWR | O_CREATの場合 および>> O_WRONLY | O_CREAT | O_APPENDの場合 。
zsh sysopenもあります 組み込み( zsh / system 内) モジュール)フラグを正確に指定できます。
POSIX準拠のシェルでは、 exec 特別なビルトインであること 、ファイルを開くことができない場合、非対話型(スクリプトを終了する)のときに致命的なエラーになります。 コマンドを使用して無効にすることができます コマンド。
if command exec 3< "$device"; then
do-what-you-need-to-do
else
handle-the-error-yourself
fi