【Bash】複数行内容の複数ファイルへのリダイレクト


  • Bash利用時に、shellscript内で内容が複数行の文字列を、複数ファイルへ書き込みたい場合がある。
  • その際に、複数echoや複数>で、つい逐次書いてしまい、長くなったり重複が目立つことがある。
  • そのため今回は、一括で複数行内容を複数ファイルへ書き込む(リダイレクト)方法を記録する。

結果

  • 以下に結果の内容を示す。
  • こちらはBashのヒアドキュメントteeコマンドを利用した方法である。
function multi(){
    # ヒアドキュメントにて複数行文字列の定義
    cat <<-EOF
        # list data
        aaa bbb ccc
        ddd eee fff
        ggg hhh iii
    EOF
}

# teeコマンドへ渡して、書き込み(リダイレクト)対象ファイルを指定
# 非出力のため、/dev/nullへ捨てる。
multi | tee result.txt result.bak.txt > /dev/null
  • 任意のshellファイルへ記述後、実行と作成確認が出来たら完了。

内容

ヒアドキュメントの活用

  • 複数文字列定義の際に、ヒアドキュメントを利用する。
  • その際に意識した以下の2点。
    • <<-を指定して、インデントを可能にする。
      • こちらを指定して先頭のタブ文字を削除して、見栄えを整える。
    • 関数の中に入れる。
      • 書き込み内容は、直指定でも変数だとしても関数の中に入れて定数化しておく。
      • 「書き込み内容の整理・利用の汎用性(パイプ等)」につながる。

teeコマンドの利用

  • 入力から、出力と書き込みを同時に行うteeコマンドを利用する。
  • そうすることにより、定義した内容をteeへ渡すことで、出力と指定ファイルへの書き込みを同時に行ってくれる。
    • ※ただし出力は行わないため、/dev/nullへ内容を渡して非出力

参考