- - PR -
シェルスクリプト expectのログ出力について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-11-27 12:45
expectを使ってpostgresSQLに入って
ファイルを読込み、インサートするシェルを作ったのですが、 そのインサートした結果のログを出力させるよう、 インサートの後に "log_file log"を書いたら その追加するコマンドまで吐き出されてしまいます… 必要なのは結果だけなのですが、 コマンドをカットして結果だけ出力するやり方はあるのでしょうか? 力を貸して頂けたらと思い書き込みました。 お願い致します。 | ||||
|
投稿日時: 2007-11-27 14:25
>その追加するコマンドまで吐き出されてしまいます… 追加するコマンドとは、SQLのことを言っているのでしょうか。 postgresSQLに入ってというのはpsqlのシェルを使っているということでいいのでしょうか。(spawn psql) ログが取られるのは出力に吐かれるものだと思うので、psqlの問題だと思うのですが。 こんなのはどうでしょう。 $ cat insert.sql insert into test values(1,'a'); insert into test values(2,'b'); $ psql -f insert.sql db INSERT 0 1 INSERT 0 1 | ||||
|
投稿日時: 2007-11-27 18:26
RaYさんありがとうございます。
>>追加するコマンドとは、SQLのことを言っているのでしょうか。 >>postgresSQLに入ってというのはpsqlのシェルを使っているということでいいのでしょうか。(spawn psql) そうです。 log_file log は記述した以降の処理を全て出力されてしまい(画面上の)、 余計なところを端折りたいのです。 copy.sh --------------------- #!/bin/sh|| expect -c " spawn psql -U postgres -d test expect "#" send \"COPY usertest FROM '/home/postgres/tmp/data.csv' CSV;\\r\" log_file log expect close " ---------------------- がシェルの中身です。 | ||||
|
投稿日時: 2007-11-27 19:16
cat data.csv|psql -c "COPY test FROM STDIN;"
これで十分だと思います。psqlにはSQLをコマンドとして実行できる-cオプションがあるので。 それとも一部だけ載せていて、他にもいろいろとあるのでしょうか。 一応expectで一部だけ記録しない方法はありますが、一つのsendの中の一部だけ記録というならこれでは無理ですね。grepかtclで消せばいいんですかね。
| ||||
|
投稿日時: 2007-11-27 19:26
ありがとうございます。
一部だけではなく、全部です。 あれを実行すると、 test=# COPY usertest FROM '/home/postgres/tmp/data.csv' CSV; COPY 1 という結果がログとして出力されます。 この、「COPY 1」だけを出したいと思っています。 | ||||
|
投稿日時: 2007-11-27 20:34
やはりexpectにする理由がわかりません。
こんなsh-scriptでいいような。 $ psql -c ”COPY usertest FROM '/home/postgres/tmp/data.csv' CSV;" -U postgres -d test > log 私の環境では数値が出ませんでしたけど。 test=# copy test from '/home/test/sql/data.csv' CSV; COPY $ psql --version psql (PostgreSQL) 8.1.9 contains support for command-line editing VERSION = 'PostgreSQL 8.1.9 on i486-pc-linux-gnu, compiled by GCC cc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)' | ||||
|
投稿日時: 2007-11-28 09:30
でわ、自分のようなやり方では、
出したいログだけは出力できないという事でしょうか? 流れでは、 WEB上のアップロードボタンを押して CSV形式のファイルがアップされる処理で その中でこのシェルを使いたいと思っていました。 | ||||
|
投稿日時: 2007-11-28 16:52
もう自分のやり方ではできないという事ですかね…?
どなたかいい方法知っているっていう方は お願い致しますm(_ _)m |