現在、私はデータベース上でバッチジョブを実行するシェルスクリプトを作成していますが、psqlを実行しているときにログファイルに書き込むかロールバックするようなシェルスクリプトアクションを入れたいと思います。このシェルスクリプトでpsqlを実行中にシェルコマンドを追加する方法
ConnectDb() {
\t PGPASSWORD=postgres psql -U postgres database -t -A -F , -v ON_ERROR_STOP=1 -v AUTOCOMMIT=0
}
printMsg() {
\t echo "$PROGRAM/$SUBMODULE $(date "+ %Y%H%s")" $1 | tee -a ~/Desktop/shell/log/test.log
}
ConnectDb <<EOF
start transaction;
select * from ...;
# do some database stubs here
# i want to add somthing like this
printMsg "Querying ..."
# many shell script command go here
if [ some accepted condition ] commit;
if [ some bad conditions ] rollback;
if [ should do more database query ] do insert, update, delete to database
commit;
EOF
同様 はそれを取得する方法はありますか?
更新 使用コプロセッサは完全に動作するはずです。 同じ問題を抱えた人のために UNIX Co process
coprocessは私のための最良の選択だと思われますが、coprocへの接続を変更するとPGPASSWORD = postgres psql -U postgresデータベース-t -A -F、-v ON_ERROR_STOP = 1 -v AUTOCOMMIT = 0 -q。私がbashを実行すると、ターミナルは端末で直接実行された場合、coprocは見つかりませんでしたが、coprocの作業は見つかりませんでした。私はここで何をセットアップすべきですか? –
アップルがshを更新していないので、zshまたはkshを使って完全に動作するはずですので、私のbashバージョンはcoproc(v3.2)をサポートしていません。大いに感謝する。それは私にとって安全な日です –