- PR -

シェルスクリプト expectのログ出力について

投稿者投稿内容
いっさ
ベテラン
会議室デビュー日: 2005/04/18
投稿数: 83
投稿日時: 2007-11-27 12:45
expectを使ってpostgresSQLに入って
ファイルを読込み、インサートするシェルを作ったのですが、
そのインサートした結果のログを出力させるよう、
インサートの後に
"log_file log"を書いたら
その追加するコマンドまで吐き出されてしまいます…
必要なのは結果だけなのですが、
コマンドをカットして結果だけ出力するやり方はあるのでしょうか?

力を貸して頂けたらと思い書き込みました。
お願い致します。
Ray
ベテラン
会議室デビュー日: 2007/09/13
投稿数: 88
投稿日時: 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
いっさ
ベテラン
会議室デビュー日: 2005/04/18
投稿数: 83
投稿日時: 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
"
----------------------

がシェルの中身です。
Ray
ベテラン
会議室デビュー日: 2007/09/13
投稿数: 88
投稿日時: 2007-11-27 19:16
cat data.csv|psql -c "COPY test FROM STDIN;"
これで十分だと思います。psqlにはSQLをコマンドとして実行できる-cオプションがあるので。

それとも一部だけ載せていて、他にもいろいろとあるのでしょうか。
一応expectで一部だけ記録しない方法はありますが、一つのsendの中の一部だけ記録というならこれでは無理ですね。grepかtclで消せばいいんですかね。
コード:
#!/usr/bin/expect --

set timeout 30
log_file log
spawn telnet file.lan
expect "login:"
send "test\r"
expect "Password:"
stty -echo
log_file
expect_user -re "(.*)\n"
stty echo
log_file log
send_log "*************\r"
send "$expect_out(1,string)\r"
interact

いっさ
ベテラン
会議室デビュー日: 2005/04/18
投稿数: 83
投稿日時: 2007-11-27 19:26
ありがとうございます。

一部だけではなく、全部です。
あれを実行すると、

test=# COPY usertest FROM '/home/postgres/tmp/data.csv' CSV;
COPY 1

という結果がログとして出力されます。
この、「COPY 1」だけを出したいと思っています。
Ray
ベテラン
会議室デビュー日: 2007/09/13
投稿数: 88
投稿日時: 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)'
いっさ
ベテラン
会議室デビュー日: 2005/04/18
投稿数: 83
投稿日時: 2007-11-28 09:30
でわ、自分のようなやり方では、
出したいログだけは出力できないという事でしょうか?

流れでは、
WEB上のアップロードボタンを押して
CSV形式のファイルがアップされる処理で
その中でこのシェルを使いたいと思っていました。
いっさ
ベテラン
会議室デビュー日: 2005/04/18
投稿数: 83
投稿日時: 2007-11-28 16:52
もう自分のやり方ではできないという事ですかね…?

どなたかいい方法知っているっていう方は
お願い致しますm(_ _)m

スキルアップ/キャリアアップ(JOB@IT)

鬩搾スオ�ス�イ鬮」髮�スセ螽ッ蜃ー鬩幢ス「隴趣ス「�ス�ス�ス�ウ鬩幢ス「�ス�ァ�ス�ス�ス�ク鬩幢ス「隴乗��ス�ケ隴擾スエ�ス讓」蟇ー陟托スア�ス�ス�ソ�ス�ス�コ�ス�ス�ス�コ鬮ォ�イ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ア鬩搾スオ�ス�イ驕カ荵怜款�ス�ス�ス�「髫イ�、隲幢スキ�ス�ス鬮」蛹�スス�ウ�ス�ス�ス�ュ�ス�ス�ス�ス驕カ荳橸ソス莉ーツ€髣比シ夲スス�」�ス�ス隶捺慣�ス�ク�ス�コ�ス�ス�ス�セ鬩搾スオ�ス�コ髯キ�キ�ス�カ�ス�ス�ス�ス陜ィ�ヲ�ス�ス�ス�ア鬯ッ�ッ闔ィ諛カ�ス�セ鬲�シ夲スス�ソ�ス�ス鬯ョ�エ�ス�ス�ス�ス�ス�「鬯ョ�「�ス�ィ�ス�ス�ス�キ鬮ォ�イ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ア鬩幢ス「�ス�ァ髯句ケ「�ス�オ驛「譎「�ス�。鬩幢ス「�ス�ァ�ス�ス�ス�ァ鬩幢ス「隴趣ス「�ス�ソ�ス�ス驍オ�コ�ス�ス
�ス�ス�ス�ス髫イ蟷�か�ス�ス�ス�エ�ス�ス�ス�セ鬯ッ�ゥ陋ケ�ス�ス�ス�ス�」鬩幢ス「隴趣ス「�ス�ス�ス�サ鬩幢ス「隴趣ソス�ス�シ鬩・�ス繽搾ソス�ケ隴趣ス「�ス�ス�ス�シ鬩搾スオ�ス�コ�ス�ス�ス�ァ鬮ッ�キ陝カ譏懶スコ繧托スソ�ス�ス�・鬩幢ス「隴趣ス「�ス�ス�ス�。鬩幢ス「隴趣ス「�ス�ス�ス�ェ鬩幢ス「隴趣ス「�ス�ソ�ス�ス驛「譎「�ス�ィ鬩搾スオ�ス�コ�ス�ス�ス�ィ鬩搾スオ�ス�コ�ス�ス�ス�ッ�ス�ス�ス�ス髮狗ソォ�托ソス�ス�ス�シ髫カ轣假ス・�ス�ス�ス�ス�エ�ス�ス�ス�セ鬯ッ�ゥ陋ケ�ス�ス�ス�ス�」鬩幢ス「隴趣ス「�ス�ス�ス�サ鬮ォ�カ鬲�シ夲スス�ス�ス�ュ鬮ッ�キ隶惹シ∝ョ�ソス�ス�ス�ァ鬩募争豎夲ソス�ス�ス�ィ髯キ莨夲スス�ア驍オ�イ陞ウ螢ス窶ウ鬯ョ�ヲ�ス�ェ�ス�ス�ス�・鬩幢ス「�ス�ァ�ス�ス�ス�ィ鬩幢ス「隴趣ス「�ス�ス�ス�ウ鬩幢ス「�ス�ァ�ス�ス�ス�ク鬩幢ス「隴乗��ス�ケ隴擾スエ�ス讓」縺暦ソス�コ�ス�ス�ス�ョ鬩搾スオ�ス�コ鬯ョ�ョ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ケ鬯ゥ蛹�スス�カ髣包スオ隴擾スカ髦。鬥エ蝮ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ア