
RH7.3の環境で試しているのですが、どうもうまく動作しません。
CGIから呼び出す方法として3つ試したのですが、
open(IN,"|sudo -u USER PROGRAM");
$text = `sudo -u USER PROGRAM`;
system("sudo -u USER PROGRAM");
最後のsytemは一応期待通りの動作になりました。
ただ、これですと実行結果(標準出力)を取り込めないのですが、何か方法はありませんか?
PROGRAMはbashのシェルスクリプトです。
最初の2つですと、sudoの関係かエラーが出ます。
./PROGRAM: SQL*Plus:: command not found
systemの場合はちゃんと動作します。
■実際にやりたいこと
oracleサーバへの問い合わせ結果を取得したいのですが、
10gのクライアントまでは入りましたが、perlのDBD::Oracleがうまく入らなかったため、sqlplusで処理しようと考えています。
最初は直接CGIから呼び出そうとしたのですが、sudo時に環境変数が設定されないので、bashのシェルスクリプトにexportで先頭に書いております。
外部公開サーバではありませんので、とりあえずセキュリティーは無視しています。
systemで実行結果をcgiの標準入力に渡すか、バッククォートでエラーが出なくするかどちらかの方法はありませんでしょうか?
No.1ベストアンサー
- 回答日時:
open(IN,"|sudo -u USER PROGRAM");
は、前にパイプがあるので標準入力を受け付けています。
標準出力を取得するには、
open(IN,"sudo -u USER PROGRAM|");
後ろにパイプをつけてください。
そして、 print while(<IN>);
間違っていた点が2カ所ありました。1つはご指摘の通り標準入力と出力の
指定の仕方を間違えていました。
もう1つは肝心のshellスクリプトに誤記があったようです。
bashでコマンドを実行する時に全体を`バッククォートでくくっていたの
ですが、これがopenなどで実行しようとしたときに引っかかっていたよう
です。
ただ、systemで実行した時には問題がなかったので、このあたりが原因を
追求するのにややこしくなっていました。
無事に解決できましたので、お礼とさせていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- UNIX・Linux linuxサーバーのキャッシュをクリアするコマンドを実行したい。 5 2023/01/24 14:52
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- UNIX・Linux ubuntuに外部侵入できるか 2 2022/04/09 12:48
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- UNIX・Linux UbuntuにROSをインストールしたい 1 2023/03/06 12:28
- UNIX・Linux shellscript内のコマンドを、sudo(toor)として実行 2 2022/09/23 15:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
教えて!perlから.exeファイル...
-
DOSコマンドで、標準出力を出力...
-
sprintfについて
-
Perl<->Oracle間での文字化けに...
-
DBの操作
-
重複するデータを抽出できる秀...
-
文字コードの変換(Shift-JISか...
-
エクセルVBA コードが同じでも...
-
VBAでCSVファイルを途中行まで...
-
openした後、closeしないでプロ...
-
ExcelをCSV書き出す場合のシー...
-
close()で例外が投げられる理由
-
C言語で特定の行を抽出する方法...
-
batファイルでrenameができませ...
-
.WFAファイルを変換する
-
window.open でのファイル指定方法
-
エクセルVBAでCSVファイ...
-
JavaでCSVファイルを高速に読む...
-
shellのコマンド deffの差分の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複するデータを抽出できる秀...
-
awkスクリプトでダブルクォーテ...
-
sprintfについて
-
DOSコマンドで、標準出力を出力...
-
文字コードの変換(Shift-JISか...
-
Perl<->Oracle間での文字化けに...
-
[Perl]ファイル出力のエンコー...
-
エクセルVBAで素数だけを出力す...
-
データの選択
-
apacheの動作について
-
「print関数は出力先のファイル...
-
教えて!perlから.exeファイル...
-
ファイル出力の改行コードをLFに
-
PerlからのCSV出力
-
Active Perlでsleepを使う。
-
[awk]uniq -cで複数ファイルの...
-
バッチファイルで、記号を含む...
-
EUCで出力されるプログラムをS-...
-
htmlから、ファイル、もしくはC...
-
リファレンスについて。
おすすめ情報