/dev/null
作成されたすべてのコンテンツを削除してEOF
読み取るために使用できる特別なLinuxファイル。
/dev/null
私はこれを読書を通して得て視覚化したいと思いましたEOF
。私が試した場合:
$ cat /dev/null | hexdump
これはうまくいきません。出力なしでプロンプトに戻ります。EOF
ASCIIコードでさえないので、そうかもしれません。
それでも
EOF
キャラクターだと見ることができますか?EOF
Bashで提供されている場合、それを検出して印刷する方法はありますかstdin
?
それは次のとおりです。
$ cat /dev/null | some_tool
EOF
私はUbuntu 20.04.3を使用していますが、解決GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)
策がある場合は、これらの特定のバージョンとは無関係であることを願っています。
これはいいえ宿題ですが、もっと学ぶ方法ですEOF
。
ベストアンサー1
元のASCII制御文字セットで定義された一連の「{something}末尾」文字がありますが、EOFは文字ではありません。 EOF は、入力ストリームから読み取れなくなったため、検出可能な条件です。
たとえば、このループは読み取る内容がなくなるまで(つまり、EOFに達するまで)続きます。
{
while IFS= read -r line; do
printf '%s\n' "Read: >> $line <<"
done
if [ -n "$line" ]; then
printf '%s\n' "And some extra data after the last line: >> $line <<"
fi
echo 'No more'
}
または、より効率的に(一部の実装ではNULバイトをブロックしないsed
)、シェルループを完全に避けてください。
LC_ALL=C sed 's/.*/Read: >> & <</'; echo 'No more'
(最後の行の後にデータがある場合は、No more
その行の接頭辞として使用します。)
端末のデフォルト設定は、キーを^D
押すと端末から送信された文字がCtrl D端末ドライバによってEOFを表すと解釈されることです。ただし、その文字(または他の文字)はアプリケーションに送信されません。 tty デバイスファイルの s が読み取る内容を返すようにし、read()
何もなければアプリケーションはそれを EOF と解釈します。端末装置の現在のEOF文字)。独自の行エディタを実装するシェルまたは他のアプリケーションは通常、この文字を同じ方法で処理します(少なくとも空行バッファにある場合)。stty -a
eof