方法を確認しましょう stdin 、 stderr 、 と stdout 動作し、それらをどのように使用することもできます。
stdin、stdout、およびstderr
コンピューティングでは、ストリームという用語はデータを転送できるものを指します。ここでは、3つのストリームすべてがデータとしてテキストを伝送します。
水流と同様に、データ流にも2つのエンドポイントがあります。ソースと流出があります。ターミナルで実行しているコマンドは、ストリームのいずれかのポイントにあります。ストリームを使用すると、2つのターミナルウィンドウ、2つの異なるコマンド、さらにはファイルを接続できます。
特別なストリームの簡単な内訳を見てみましょう。
- stdin:標準入力を表します。入力としてテキストを受け取ります。
- stdout:標準出力を表します。コマンドのテキスト出力は、stdoutストリームに保存されます。
- stderr:標準エラーを表します。コマンドでエラーが発生すると、エラーメッセージがこのストリームに保存されます。
Linuxでは、ほとんどすべてのストリームがファイルであるかのように扱われます。ファイルの読み取り/書き込みと同じように、これらのストリームからデータの読み取り/書き込みを行うことができます。
ファイルにアクセスする簡単な方法は、ファイルに関連付けられている一意のファイル記述子番号を使用することです。これらのストリームの場合、それぞれに一意の値が割り当てられます。
- 0:stdin
- 1:stdout
- 2:stderr
stdin、stdout、およびstderrの動作
アクションを通じてこれらのストリームについてさらに学ぶことから始めましょう。まずはstdinから始めます。
次のコマンドを実行します。
$読んだ
コマンドにはキーボードからの入力が必要です。ここで、読み取りツールはstdinから入力を取得しています。それでは、stdoutを見てみましょう。
最初にコマンドを実行します。
$ls -NS
ここで、lsコマンドは、現在のディレクトリにあるファイルを一覧表示します。リストはに送信されます stdout そして、端末はそれを印刷します。それでは、stderrを確認しましょう。
エラーが発生する可能性のあるさまざまな方法があります。この例では、lsに無効な引数を送信すると、エラーが発生します。
$ls -NSなんでも
ここには、何かという名前のファイルはありません。 lsが返すメッセージがに送信されるのはそのためです stderr 。
配管
これは、stdinおよびstdoutストリームを最大限に活用する一般的な手法です。例を挙げて説明しましょう。
$捨てた 'こんにちは世界' | グリップこんにちは
ここで、|サインは配管を担当します。出力 捨てた 生成するはで書かれています stdout ストリーム。次に、配管はgrepコマンドのstdoutのコンテンツをstdinにリダイレクトします。これが、grepが操作を実行するコンテンツを認識する方法です。
stderrとstdoutの両方を次のコマンドにパイプする場合は、代わりに|&を使用します。
$捨てたこんにちは世界|& 猫$なんでも|& 猫
ストリームのリダイレクト
これらのストリームがどのように機能するかがわかったので、リダイレクトする方法を見てみましょう。配管はリダイレクトの一形態です。ただし、stdinとstdoutのみが含まれます。 Bashを使用すると、3つのストリームすべてを特定の方法で制御できます。
stdoutコンテンツをファイルにリダイレクトするには、>角度に続けてターゲットファイル名を追加します。
$捨てたこんにちは世界>>hello.txt
ここで、echoコマンドの出力はhello.txtファイルに保存されます。
ファイルがすでに存在する場合は、上記のコマンドで上書きされます。これを回避するには、ファイル名が一意であることを確認してください。上書きしたくない場合は、代わりに>>を使用することをお勧めします。ターゲットファイルの最後に出力を追加します。
$捨てた 'こんにちは世界' >>hello.txt
stdinの目標は、入力を処理することです。これはリダイレクトすることもできます。たとえば、キーボードから入力を入力する代わりに、ファイルからロードすることができます。
このコマンドでは、catはhello.txtファイルから直接入力を取得します。
$猫 <hello.txt
別の例でリダイレクトを確認してみましょう。今回は、Pythonスクリプトを使用します。
$#pyin.py$名前= 入力(('名前を入力NS')。
$Eメール = 入力(('メールアドレスを入力してNS')。
$印刷((「あなたの名前は%s、メールアドレスは%sです」%((名前、 Eメール)。)。
スクリプトの入力はhello.txtにあります。
$猫hello.txt
スクリプトの入力としてファイルを送信しましょう。
$ python3pyin。py <こんにちは。txt
興味深いことに、両方をリダイレクトできます stdin と stdout 同じコマンドラインで。ここで、次のコマンドはhello.txtを次のように使用します stdin と送信します stdout コマンドのファイルへの変換。
$ python3pyin。py <こんにちは。txt >>出力。txt
stderrのリダイレクトはstdoutに似ています。ただし、stderrを示すために説明ID2を記載する必要があります。それ以外の場合は、stdoutを使用します。
ここでは、コンテンツをリダイレクトします stderr テキストファイルに。
$なんでも2>>error.txt
StdoutとStderrのリダイレクト
はい、両方を同時にリダイレクトすることは可能です。必要なのは、リダイレクトの前に説明ID1と2に言及することだけです。
$捨てたこんにちは世界1>>output.log2>>debug.log
最終的な考え
stdin 、 stdout 、 と stderr bashがデフォルトで提供する素晴らしい機能です。 bashスクリプトに興味がある場合、それらを使用すると、トリッキーな状況で非常に役立ちます。
bashスクリプトについてもっと知りたいですか?これから始めましょう bashスクリプトの初心者向けガイド !
楽しみ!