Skip to content
Latchkey

stdinリダイレクトとは?ファイルから入力を供給する

stdinリダイレクトは、< 演算子を使ってファイル (または他のソース) の内容をコマンドの標準入力として供給します。

ほとんどのコマンドはstdinから読み取ることができ、リダイレクトはその入力がどこから来るかを選べます。< 演算子は、コマンドのstdinをキーボードではなくファイルに向けます。CIスクリプトは、対話的な入力なしにSQL、config、データファイルをツールに供給するために入力リダイレクトを使いますが、これはCIにキーボードがないため重要です。

stdinリダイレクトとは何か

< 演算子は、コマンドの標準入力をファイルに接続します。sort < data.txt は、あなたがそれを入力したかのように、ファイルの内容を入力として sort を実行します。

リダイレクト対パイプ

pipeはあるコマンドの出力を別のコマンドの入力に送り、リダイレクトはファイルの内容をコマンドの入力に送ります。cat data.txt | sortsort < 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は非対話的に入力を供給するのにこれを使います。

関連ガイド