お世話になっております。
よろしくお願いします。
実現したいこと
bashでコマンド実行した結果をファイルに出力したいと考えています。
諸事情により、複数のファイルに結果を出力したいと思っています。
※下記コードを例とすると、TEST_1.logは実行ごとに随時上書き。TEST_2.logは処理最後に削除することで、実行ごとに随時作成。
試したこと
下記のように、リダイレクトを複数用意してみましたが、最初のリダイレクトであるTEST_1.logにしか出力されませんでした。
bash
1(psql -eh ${PSQL_HOST} -U ${PSQL_USER} -d ${PSQL_DB} 2>&1) >> TEST_1.log 2>&1 >> test_2.log 2>&1 << EOF 2 3\COPY TABLE TO '出力先パス' WITH CSV HEADER NULL AS 'null' DELIMITER E'\t' 4 5EOF
一回の処理で複数のファイルに出力する方法はありますでしょうか?
ない場合は、TEST_2.logに出力した結果を、TEST_1.logに追記していく方向で考えてみたいと思います。
追記
本処理はシェルスクリプトに記載している処理の一部となります。
テストに使用したシェルスクリプトを記載します。
bash
1#!/bin/bash 2 3PSQL_HOST=**** 4PSQL_USER=**** 5PSQL_DB=**** 6 7echo "!! START" >> TEST_1.log 2>&1 8 9(psql -eh ${PSQL_HOST} -U ${PSQL_USER} -d ${PSQL_DB} 2>&1) | tee TEST_1.log 2>&1 | tee test_2.log 2>&1 << EOF 10 11\COPY TABLE TO '出力先パス' WITH CSV HEADER NULL AS 'null' DELIMITER E'\t' 12 13EOF 14 15echo "!! END" >> TEST_1.log 2>&1 16 17exit 0
上記実行すると、下記のようなログになりました。
TEST_1.logの内容 !! START !! END
TEST_2.logの内容 \COPY TABLE TO '出力先パス' WITH CSV HEADER NULL AS 'null' DELIMITER E'\t'

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/04 02:59
2019/02/04 03:09
2019/02/04 04:33
2019/02/04 04:57
2019/02/04 05:18