一部のスクリプトで次のようなコマンドが表示されます:/bin/cat somefile | someprogram
。 someprogramと同じようにパイプ全体を読み取る方法を知りたいです。したがって、/bin/cat something | myprogram.sh
を実行すると、myprogram.shには、パイプされたもの(すべてのパイプテキスト)に等しいmypipevarという変数があります。不明な点がある場合はお知らせください。読み取りが機能しない可能性があり、bashが適切なシェルではない可能性があることを読みました。
回答
パイプは
を接続しますあるプログラムのdivid = “2beac55132″>
から別のプログラムのstdin
に移動するため、スクリプトではstdin
から読み取ります。前のコマンドが出力したものを取得します。これを変数に読み込む簡単な方法は、たとえばmyprogram.sh
内にcatを使用することです。
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
として実行できます。