同じ作業を何度か行わなければならない時、スクリプトを書くか、コピペで流し込むか迷うことがあります。複雑な処理ではなく、定型作業ならばメモ帳にコマンド列を列挙し、一気にコピー、そしてペーストしちゃいます。
そんな時、bashのヒアドキュメントを使うことが結構あるのでメモっときます。
基本 (ノーマル)
$ cat - << EOF > I am a pen. > you too? > EOF I am a pen. you too? $
EOFまでの入力された文字列を << の左側にあるコマンドへ流し込む。
ファイルに文字列を流し込む(よく使う)
$ cat - << EOF >> ./config.conf name = pen age = 5 EOF $ cat ./config.conf name = pen age = 5 $
変数もコマンド実行結果も埋め込めるから、設定ファイルをテキトーに流し込む時など。
_MYIP=$(ip addr show dev bru02|grep -w inet|awk '{print $2}') cat - << EOF >> ./config.conf MY_IP = ${_MYIP} OS = $(uname) VERSION = '$(uname -v)' EOF $ cat ./config.conf MY_IP = 10.255.253.5/30 OS = Linux VERSION = '#1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11)' $
べんりべんり。
ヒアドキュメントの実行結果をパイプに渡す(たまに使う)
インタラクティブなコマンドに命令を流し込んでその結果を整形する時とかー
cat - << EOS | curl -s telnet://localhost:25/ | cat -n - HELO mail QUIT EOS 1 220 xxx.example.com ESMTP Postfix (Debian/GNU) 2 250 xxx.example.com 3 221 2.0.0 Bye $
載せるのにいい例が思い浮かばないけど。