この質問に影響を与えたのは、ウォッチドッグデバイスの機能をテストしていて、デバイスを開いて何もしない/終了するまで待つシェル組み込みコマンドがあるかどうかを考えていたということです。エコー/タッチコード> 操作を実行した直後にデバイスを開閉しているように見えます。
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