コマンドの場合、ファイル名の代わりに引数として-
を使用すると、STDINまたはSTDOUTを意味します。
ただし、この例では、-
という名前のファイルを作成します。
echo hello > -
この例の-
をSTDOUTにするにはどうすればよいですか?
逆に、次のような例で-
を-
という名前のファイルを意味するようにするにはどうすればよいですか。
cat -
Stdin/stdoutを意味するファイル名として-
を使用することは、多くのプログラムが使用する規則です。これはファイル名の特別なプロパティではありません。カーネルは-
を特別なものとして認識しないため、-
をファイル名として参照するシステムコールでは、-
をファイル名として文字どおり使用します。
Bashリダイレクトでは、-
は特別なファイル名として認識されないため、bashはそれをリテラルファイル名として使用します。
cat
が文字列-
をファイル名として認識すると、それをstdinの同義語として扱います。これを回避するには、cat
が参照する文字列を、-
というファイルを参照するように変更する必要があります。これを行う通常の方法は、ファイル名の前にパス-./-
、または/home/Tim/-
を付けることです。この手法は、コマンドラインオプションがファイル名と競合する同様の問題を回避するためにも使用されるため、./-e
と呼ばれるファイルは、プログラムの-e
コマンドラインオプションとして表示されません。
echo hello > -
の代わりに、echo hello > /dev/stdout
を使用できます。
「-」は、サポートしたい各プログラムで実装する必要がある規則ですが、/dev/stdin
、/dev/stdout
、/dev/stderr
は、OS(少なくともSolaris、LinuxおよびBSDは、アプリケーションに依存せず、意図したとおりに機能します。
camh言及 、-
は、一部のプログラムで使用される命名規則にすぎません。シェルが認識するファイル記述子を使用してこれらのストリームを参照する場合は、_ jiliagreは正しい を使用して/dev/stdin
または/dev/stdout
代わりに。これらのファイル名は、通常のファイル名が機能する場所ならどこでも機能するはずです。
そうは言っても、最初の例はちょっとばかげています。リダイレクトオペレーターがファイルに書き込むためにキャッチする出力は、すでに標準出力になっているため、リダイレクトして元の場所に書き戻すことはできません。そこで使用する動作は、リダイレクトではなくパイプです。
echo hello |
2番目の例では、内部エイリアスではなく、その名前のリテラルファイルが必要であることを示す必要があるだけです。次のようにファイルへのパスを指定することにより、これを最も簡単に行うことができます。
cat ./-
1に関しては、プログラムはそれをサポートする必要があります。勝手に使うことはできません。 2に関しては、入力をリダイレクトします(例:cat < -
)。
「-」アプローチには多くの問題があります。まず、「-」文字の解釈が必要であり、多くのプログラムはそのような解釈を実行しません。さらに、ハイフンをコマンドラインオプションの終わりを示す区切り文字として解釈するプログラムもあります。プログラムはファイル名引数で動作するように作成されています。「-」アプローチはハックです。ニースですが弱いです。
最善の方法は:
$ echo hello > /dev/fd/1
/dev/stdout
は/dev/fd/1
のシンボリックリンクです
特殊文字には、主に2つの意味があります。
ASCII数値チャート。
スクリプトまたはシンボリック。
単一の文字が文字列を表すか、文字列として機能する可能性があります。私の理解として。
c言語ではfopen()
関数は、最初のファイルストリームと、ファイルを開く2番目のモードの2つの引数を取ります。モードは文字列です。単一の文字であっても。
cat> "-"が機能します。