パイプとbashでパイプを使用する方法

パイプとbashでパイプを使用する方法

一部のスクリプトでは、次のコマンドを見たことがあります/bin/cat somefile | someprogram。いくつかのプログラムのように、パイプ全体を読む方法を知りたいです。したがって、myprogram.shを実行すると、 /bin/cat something | myprogram.shパイプで接続されているすべてのもの(すべてのパイプテキスト)と同じmypipevarという変数があります。不明な場合はお知らせください。私は読書がうまくいかず、bashが正しいシェルではないかもしれないことを読んだ。

ベストアンサー1

パイプはstdoutあるプログラムを別のプログラムにリンクするので、stdinスクリプトから読み取るstdinだけで前のコマンドが印刷した内容を得ることができます。変数で読みやすい方法はcatを使うことですmyprogram.sh。たとえば、次のようになります。

mypipevar="$(cat ${1:-/dev/stdin})"
echo "Obtained the value: '$mypipevar'"

しかし、一度に処理するのではなく、1行ずつ処理したい場合が多いです。

while read line
do
  echo "$line"
done < "${1:-/dev/stdin}"

これは${1:-/dev/stdin}最初の引数を提供し、引数が指定されていない場合にファイルの/dev/stdinように読み取れるstdinの内容を含みます。これcommand | scriptを通してまたは単にscript filename

おすすめ記事