Bashリダイレクトの「-」はどのように機能しますか?

Bashリダイレクトの「-」はどのように機能しますか?

以前はどこかでこれの説明を見たことがありますが、今は参照が見つかりません。 Ubuntu dockerスタートガイドの使用例:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

私はそれが何をすることになっていたのか漠然と覚えています。 IIRC そうですね。パイプを通して渡された標準入力を何らかの形で使用する必要があります。しかし、この場合、なぜこれが必要なのですか?

私が見つけた最も近い記事は次の記事です。http://www.catonmat.net/blog/bash-one-liners-explained-part-Three/。たぶん、非標準ストリームを開いて閉じる例のように、ストリームを閉じることに関連していますか?

exec 3<file
exec 3>&-

ベストアンサー1

これはBashや他のシェルの機能ではありませんが、多くのアプリケーションでstdin。他のファイルで処理されることを願っています。たとえば、ファイルと。stdinstdincat foo -catfoostdin

の場合apt-keyマニュアルページaddサブコマンドにファイル名を指定することが必須であり、使用するように指定する必要がある-ことを意味しますstdin。目的の操作を実行し、目的の入力を読むことはアプリケーションに依存することに注意してくださいstdin。基本的な入力ソースとして使用するのは習慣の問題です。

-一部のプログラムは意味をサポートしておらず、stdinそれをリテラルファイル名として扱います。このような場合は、このような回避策が/dev/stdin必要です。


に関しては>&-明示的に接続されていることを見ることができません。これは、単純な文字を誤って使用した可能性があります。ダッシュは、>&-「なし」(空のフィールド)を表すストライキとの接続から来ることができます。なぜこんな意味なのかstdinわかりません。しかし、これよりも良く見えるか似ており%、他の多くの文字は異なる意味を持っています。

おすすめ記事