一部のスクリプトでは、次のコマンドを見たことがあります/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
。