Diary

Diary

日々学んだことをアウトプットする場として初めてみました

bash でコマンドの実行結果をファイルとして扱う

プロセス置換(Process Substitution)を用います。使い方と一緒に、ぜひ名前も覚えましょう。

使い方

# 通常のファイル入力の場合
$ cat test.txt

# コマンドの実行結果をファイルとして扱う場合
$ cat <(echo "hoge from echo command")
hoge from echo command

ファイル名<(コマンド)で置き換えるだけです!

<(の間にスペースはいりません。

少し具体的なコマンドで見てみます

diff コマンド

diff <(echo 3.0+3 | bc) <(echo $((3.0+3)) )
1c1
< 6.0
---
> 6.

片方をファイルにして、もう一方をプロセス置換にすることもできます

$ cat file.txt
file

$ diff file.txt <(echo "content")
1c1
< file
---
> content

ファイル読み込み:while read ...

ファイルの中身を読み込みながら1行ずつ処理を行う場合、次のように書くことができます

while read line
do
    echo "$line"
done < file.txt

この while ループに入力させている file.txt の部分に、プロセス置換を使うことが可能です。

### expected outputs
# hoge
# pien
while read line
do
    echo "$line"
done < <(echo -e "hoge\npien")

おわりに

ファイル入力しか受け付けないコマンドに対し、『ちょっとしたテストコードを試したいが、わざわざファイルを用意するのもめんどくさい』といったケースに使えると感じました。

他にも有用なユースケースがあれば教えていただきたいです。