シェルプログラムは文字ドライバを開き待ちます。

シェルプログラムは文字ドライバを開き待ちます。

この質問の動機は、私が監視デバイスの機能をテストしていて、終了するまで何もせずに待たずにデバイスを開くことができるシェル組み込みコマンドがあるかどうか疑問に思うからです。 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にksh931つを作成しました)。fcntl(3, F_SETFD, FD_CLOEXEC)

閉じるには:exec 3<&-

zshksh93および では、bashfd = 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

おすすめ記事