[pgsql-jp: 36116] Re: psqlコマンドでshを実行?

Kouji Ito kouji @ cty-net.ne.jp
2005年 10月 12日 (水) 18:27:25 JST


こんにちは、伊藤です。

Yumiko Izumi wrote:
> 
> 以下のようなコマンドラインを実行するコマンドをC言語で開発しています。
> 
> psql testDB -t -f test.sql -o result.txt -h targetnode -U user >& err.txt
> 

C言語で作成したコマンドから上記のpsqlを実行する際にどのような
方法で行っているのかがポイントだと思います。
おそらく、system(3)や、exec(2)ファミリーを使っているんだと思いますが、
それぞれのOS上で、system(3)や、exec(2)をmanしてみて下さい。
多分、shを使うって記述されていると思います。

> 
> しかし、以下疑問が残っています。
> 1.psqlを実行してshのエラーが出るのはなぜか?
> 2.ログインシェルはcshなのにshで実行されているように見えるが、なぜか?

と言うことで、上記2つの疑問に関しては、そういう仕様だと思います。
何故そうなっているのかについては良く判りませんが、想像するに、
system(3)や、exec(2)で使うシェルはシステムで必ず存在しているシェル
にしておかないと、何かと困るケースがあると思うので、各OSで一番基本的な
シェルを使うようになっているんだと思います。(例えば、OSの起動時にinitが
動き始めて、/etc/の下のスタートアップ処理を実行するときなんかもそうで
すよね。)


> 3.どうすればログインシェルで実行できるのか?
> 

C言語で作成するコマンドを
#!/bin/csh
psql testDB -t -f test.sql -o result.txt -h targetnode -U user >& err.txt
のようにして、これを実行してやれば良いかと思います。



pgsql-jp メーリングリストの案内