スクリプトはエコーラインを読み取る必要があります。

スクリプトはエコーラインを読み取る必要があります。

したがって、私のスクリプトが標準出力にエコーされるこの行で動作する必要があるBourne-shellスクリプトを作成する必要があります。たとえば、次のようになります。

echo *something* | myscript.sh [parametres...] 

これはおそらく私が学習過程で見落としたかもしれない基本的なものです。私の試みを含めますが、解決策とは離れています。とにかくどんなアドバイスにも感謝します。

ベストアンサー1

ここで注意すべき重要な点は、子が親のSTDIN / STDOUT / STDERRファイル記述子を継承することです。つまり、他のプロセス(例と同じパイプ)のSTDOUTに接続されているSTDINを使用してスクリプトを起動すると、スクリプトが開始するすべての項目のSTDINも他のプロセスの同じSTDOUTに接続されます。

echo foo | ./myscript.shどこかでこれを行う場合の意味は次のとおりですmyscript.sh

#!/bin/bash
sed -e 's/foo/bar/'

次にSTDOUTsedで読み書きecho fooします(起動時にリダイレクトされないため、TTYに接続されますmyscript.sh)。
例:

$ echo foobar | ./myscript.sh
barbar

 

したがって、使用方法は実行する操作によって異なります。入力を変数としてキャプチャする場合は、組み込みread関数を使用してこれを実行できます。
たとえば、

#!/bin/bash
IFS= read -rd '' foo
echo "foo=<$foo>"

結果:

$ echo -e 'hello\nworld' | ./myscript.sh
foo=<hello
world>

おすすめ記事