1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at
  • 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へ内容を渡して非出力

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?