期待どおりに動作します。
$> cat ./readfromstdin.sh
echo reading
cat /dev/stdin
$> echo hello | ./readfromstdin.sh
reading
hello
一時ファイルなしで同様のことを達成しようとしています。私の最初の試みは
echo hello | (echo cat /dev/stdin|sh)
これはうまくいきません。 heredocを使うとうまくいきません(正しい構文が何であるかはわかりませんが:
echo hello | (cat << EOF | sh
cat /dev/stdin
EOF)
pipe cmdsubst pipe heredoc>
シェルにパイプされたスクリプトを使用してstdinからデータを読み取ることはできますか?
ベストアンサー1
サブシェルにパイプを接続すると、比較的簡単に説明する操作を実行できます。
$ echo hello | ( echo reading; cat /dev/stdin )
reading
hello
私はこれについてのどのユースケースも想像できないことを認めています。ただしないでください。
$ echo hello | ( echo reading; read var; echo "$var")
reading
hello
これにより、標準入力の内容を変数として保存し、余暇に操作できます。