heredocスクリプトのstdinスクリプトを読み取り、「sh」にパイプします。

heredocスクリプトのstdinスクリプトを読み取り、「sh」にパイプします。

期待どおりに動作します。

$> 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

これにより、標準入力の内容を変数として保存し、余暇に操作できます。

おすすめ記事