質問に対する回答 とそのコメントにより、 基本定義のPOSIX適合性セクション を読んで_/dev/stdin
_、_/dev/stdout
_および_/dev/stderr
_は、POSIX標準に準拠するために実際に必要でした。
彼らはそうではないことがわかりました:
システムは非標準の拡張機能を提供する場合があります。これらはPOSIX.1-2008で必要とされない機能であり、次のものを含む場合がありますが、これらに限定されません:[...]特殊なプロパティ(_
/dev/stdin
_、_/dev/stdout
_、および_/dev/stderr
_)
私が見つけることができる限り、これは標準でこれらのファイルについて言及しているonlyです。
私はそれらを実装していない1つの「システム」(実際には環境)にしかアクセスできません。それはWindows上のMinGWです(私が知る限り_/dev
_はありません)。私の知る限り、すべての無料のUnicesにはそれらがあり、Windowsの新しいLinux環境であるCygwinとDarwin/macOSにもあります。
私は商用のUnicesに精通していません。
ファイルシステム内のファイルとして_/dev/stdin
_、_/dev/stdout
_、および_/dev/stderr
_を実装していないPOSIXシステム、Unix、または今日説明されているUnixライクな環境はありますか?
ファイルシステムのファイルとして/ dev/stdin、/ dev/stdout、/ dev/stderrを実装していないPOSIXシステム、Unix、または今日説明されているUnixライクな環境はありますか?
はい、少なくとも以下の私のシステム例では。
私はこのシステムの専門家ではありません。ただし、ウィキペディアが主張するAIX 6.1は次のとおりです。
the Open GroupのUNIX 03標準に認定されたバージョンを持つ5つの商用オペレーティングシステムの1つ( https://en.wikipedia.org/wiki/IBM_AIX )
私がアクセスできるインストールにこれらのファイル記述子を実装していないようです。ご覧のように、bashを使用すると、リダイレクトの目的で存在するかのように動作します。
$ uname -s
AIX
$ echo $Shell
/usr/bin/ksh
$ ls -al /dev/stdin
ls: 0653-341 The file /dev/stdin does not exist.
$ ls -al /dev/stdout
ls: 0653-341 The file /dev/stdout does not exist.
$ ls -al /dev/stderr
ls: 0653-341 The file /dev/stderr does not exist.
$ echo foo >/dev/stderr
The file access permissions do not allow the specified action.
ksh: /dev/stderr: 0403-005 Cannot create the specified file.
$ bash
bash-4.2$ ls /dev/stderr
ls: 0653-341 The file /dev/stderr does not exist.
bash-4.2$ echo foo >/dev/stderr
foo
他のコメント者が述べたように、次の質問もいくつかの興味深い情報を提供します:
私は最初の投稿の後でよく投稿していますが、将来の視聴者のためにこのコメントを追加したいと思いました。
AIX 6.1システムでは、上記と同じ結果を/ dev/stdoutに書き込みますが、AIX 7.1システムでは期待どおりに機能するため、/ dev/stdoutのサポートが追加されました。
AIX 6.1(ksh93)
echo "Hello" > /dev/stdout
ksh93: /dev/stdout: cannot create.
[The file access permissions do not allow the specified action.].
AIX 7.1(ksh93)
echo "Hello" > /dev/stdout
Hello