stdinリダイレクトとは?ファイルから入力を供給する
stdinリダイレクトは、< 演算子を使ってファイル (または他のソース) の内容をコマンドの標準入力として供給します。
ほとんどのコマンドはstdinから読み取ることができ、リダイレクトはその入力がどこから来るかを選べます。< 演算子は、コマンドのstdinをキーボードではなくファイルに向けます。CIスクリプトは、対話的な入力なしにSQL、config、データファイルをツールに供給するために入力リダイレクトを使いますが、これはCIにキーボードがないため重要です。
stdinリダイレクトとは何か
< 演算子は、コマンドの標準入力をファイルに接続します。sort < data.txt は、あなたがそれを入力したかのように、ファイルの内容を入力として sort を実行します。
リダイレクト対パイプ
pipeはあるコマンドの出力を別のコマンドの入力に送り、リダイレクトはファイルの内容をコマンドの入力に送ります。cat data.txt | sort と sort < data.txt は似た結果を得ますが、リダイレクトは余分なプロセスを避けます。
入力リダイレクトの形式
cmd < fileはファイルをstdinとして供給します。cmd <<EOF ... EOFはインラインのヒアドキュメントを供給します。cmd <<< "text"は単一のヒア文字列を供給します。
なぜリダイレクトを使うか
入力リダイレクトは、ユーザーが入力することなくツールにデータを消費させることを可能にし、これは自動化に不可欠です。また、不要な cat | command の連鎖を避けることでスクリプトをクリーンに保ちます。
CIにおけるstdinリダイレクト
CIは、準備したファイルをツールに供給するために入力リダイレクトを使います。SQLスクリプトをデータベースクライアントに、configをジェネレータにといった具合です。CIは非対話的なので、ファイルをstdinにリダイレクトするのが、ツールが本来プロンプトで求める入力を供給する方法です。
マネージドrunnerでのツールへの供給
Latchkeyのrunnerでは、ファイルをコマンドのstdinにリダイレクトすることで、人間なしにステップが対話スタイルのツールを操作できます。前のコマンドで入力ファイルを準備し、それをリダイレクトで供給して、ステップを完全に自動化したまま保ちます。
重要なポイント
- stdinリダイレクトは
<を使ってファイルをコマンドの入力として供給します。 - あるコマンドの出力を別のコマンドに接続するpipeとは異なります。
- キーボードがないため、CIは非対話的に入力を供給するのにこれを使います。