次の非常に基本的なBashスクリプトを見てください。
#!/bin/bash
while read l
do
echo $l
echo "next one"
done <<< $(ps aux)
私のコンピューターにはいくつかのプロセスがあり、ps aux
コマンドはターミナルで正常に動作します。
ループでone反復のみを取得し、ps
コマンド出力が同じ行に表示されます。意図したとおりに機能しないのはなぜですか?
bash
バージョン<4.4-beta
では、二重引用符を追加する必要があります:
#!/bin/bash
while read l
do
echo $l
echo "next one"
done <<< "$(ps aux)"
見る:
ドキュメントが常に言っているように、bashはヒア文字列の展開を分割しなくなりました。
一般に、プロセス置換を使用する方が良いと思います。
#!/bin/bash
while read l
do
echo $l
echo "next one"
done < <(ps aux)
(問題を回避するために、 IFS=
を使用することをお勧めします)。
またはさらに良い方法として、ファイルの読み取りに特化したプログラムを使用するか、例: awk
。
ps aux | awk '{print $0; print "next one"}'