• ベストアンサー

テーブル破損チェックについて

perl(UNIX環境)において、mysqlの「myisamchk」コマンドでテーブル破損チェックを行おうとしています。 perlスクリプトにおいて @result = qx{/usr/local/mysql/bin/myisamchk テーブル名} と記述して、@resultに戻りメッセージを受けようとしていますが、@resultに戻り値がどうしても入りません。 (スカラー変数にしてもとれませんでした) 大変困っていますので、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • angband
  • ベストアンサー率51% (86/168)
回答No.3

UNIXには「標準入出力」という考え方があります。 そして「標準入出力」の扱いはシェルによって違います。 今回は qx{} ですので自動的に /bin/sh が使われます。 2>&1 の意味は「ファイルハンドル2番(標準エラー出力) を、ファイルハンドル1番(標準出力)にリダイレクト する」ということになります。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • angband
  • ベストアンサー率51% (86/168)
回答No.2

標準入力と標準エラー出力の処理についての話ですね。 qx{ myisamchk /your/foo.MYI 2>&1 } ではどうですか。

yokt
質問者

補足

迅速な回答、ありがとうございました。 2>&1 をつけてスクリプトを実行したところ うまく動き、感動しました。 さて、2>&1 というのは、どのような意味なのでしょうか。 参考書で調べてみたのですが、">&" がハンドルを コピーする程度しかのっていませんでした。 度々申し訳ございませんが、ご説明お願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • angband
  • ベストアンサー率51% (86/168)
回答No.1

テーブル名が foo だとして、 # myisamchk /your/data/path/foo.MYI で、どうですか。

yokt
質問者

補足

# myisamchk /your/data/path/foo.MYI にて実行してみました。 変数には、 $VAR1 = 'Checking MyISAM        file: /usr/local/mysql/var/test/sample.MYI Data records: 2387 Deleted blocks: 0 - check file-size - check key delete-chain - check record delete-chain - check index reference - check data record references index: 1 - check data record references index: 2 - check record links’ が入っていますが、肝心なテーブルエラー部のメッセージ (下部のメッセージ)のみ、変数に格納されません。 /usr/local/mysql/bin/myisamchk: warning: Size of datafile is: 588450 Should be: 588400 /usr/local/mysql/bin/myisamchk: error: Found wrong record at 1244 MyISAM-table '/usr/local/mysql/var/test/sample.MYI' is corrupted Fix it using switch "-r" or "-o" どうしたらよいでしょうか。 教えてください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 構文チェックについて

    #!/usr/local/bin/perl $perl = `perl -wc web.cgi`; $perl=~s/[\r\n]/<BR>/g; print <<"END"; Content-type: text/html <HTML> <HEAD><TITLE>PERLCHECK</TITLE></HEAD> <BODY> perl<BR>$perl </BOBY> </HTML> END exit; と以上のように書いてますが。telnet上ではOKと出ますがブラウザでみるとエラーが出ます。 やりたいことは、Telnetを使っての構文チャックではなく、ブラウザ上で構文のチェックは出来ないか模索しています。上記の`UNIXコマンド`の部分で、freeやdf等のコマンドを実行させると実行結果が得られるので、その延長で出来ないかと考えてます。初心者なのですいませんが教えてください。

    • ベストアンサー
    • Perl
  • ActivePerlで#!/usr/bin/が無効

    WindowsXPにActivePerl(5.16.3.1603)をインストールして、 コマンドラインに「perl script.scr」と入力して スクリプトファイルは実行できるのですが、 スクリプトファイルの1行目に「#!/usr/bin/perl」を記述して、 コマンドラインに「script.scr」と入力して実行しようとすると、 「C:\・・・\script.scrは有効なWin32アプリケーションではありません。」 というメッセージが表示されて正しく実行できません。 perl.exeのあるフォルダをC:\usr\binフォルダにして、 1行目を #!/usr/bin/perl #!C:/usr/bin/perl #!C:\usr\bin\perl などいろいろ試してみましたが、どれも 前述のメッセージが表示されて実行できませんでした。 コマンドラインに「script.scr」と入力するだけで 実行することができるようにするには どのようにすればいいのでしょうか。 script.scrの拡張子scrをplなどに変更して この拡張子のファイルに対してperl.exeに関連付けることにより script.plだけでも実行できるようにはなりますが 拡張子.scrではこの関連付けができませんので #!/usr/bin/perl等を使用する方法で解決したいです。 ジャンクションとかApacheなどが全く分かりませんので これらを使わずに簡単にできる方法がありましたら教えてください。 (なお使っても分かりやすい手順があれば可です) よろしくお願いします。

    • ベストアンサー
    • Perl
  • 環境変数pathについて

    環境変数pathについてお聞きしたいことがあります。たとえば /usr/local/bin:/bin:/usr/bin: このような場合、/usr/local/binと/binと/usr/binに入力されたコマンドのプログラム ファイルを探しに行くというような解釈をしているのですが、 /usr/local/binがあるならば/binや/usr/binといったようなpathは必要ないような気がします。なぜこのような書き方をするのでしょうか? お忙しいところ申し訳ございませんがよろしくお願いします。

  • ニフティでメールフォームを使用する方法

    ニフティの無料HPサービスでメールフォームを使いたいのですがsendmailが使えません。 以下の説明書きがありましたが、シェルスクリプトは知識がなく、ちょっと困っています。 シェルスクリプトでも可能なものなんでしょうか? ---------------------------------------------- perlについて perlのバージョンは5です。 (ただし、perl5での標準的なモジュールは使用できません) パスは、「/usr/local/bin/perl」となります。 スクリプトの1行目は「#!/usr/local/bin/perl」と記述してください。 シェルスクリプト(sh)について シェルスクリプト(sh)に関しては、以下のコマンドがご利用可能となっております。 awk, chmod, date, egrep, expr, grep, mkdir, rmdir, sh, cat, cp, echo, env, find, ls, mv, rm, sed なお、sendmailはご利用いただけません。 --------------------------------------------------

    • ベストアンサー
    • CGI
  • CGI Perlについて

    低レベルな質問で恐れ入ります。 Perlのパスがサーバーのサイトで …/usr/local/bin/perl となっているのですが #!…/usr/local/bin/perl でしょうか? #!/usr/local/bin/perl でしょうか?

  • 起動スクリプト

    Mysql5系で起動スクリプトは以下のように設定しています。 #cat /etc/rc.d/rc.local if [ -x /usr/local/mysql5.0/bin/mysqld_safe ]; then /usr/local/mysql5.0/bin/mysqld_safe --user=mysql & fi これではpsで消すとかしか停止などができないので起動スクリプトを 作成したいのですが、作成方法がよくわかりません。 もし、Mysql5系で起動スクリプトを作成するとしたらどんな感じになるのでしょうか? できれば、START, STOPなども表示させるようにしたいのですが。。。

    • ベストアンサー
    • MySQL
  • CGIからのUNIXコマンドを防止する方法

    telnet.cgi を使うと、CGIからUNIXコマンド(rmなど)が自由に使えてしまいます。 この利用を防止する方法はないですか。 /usr/bin /usr/local/bin フォルダのアクセス権を700にしてみたのですが、これではhttpdなど他のものまで、影響を受けてしまいました。

  • UNIXっぽくCUIでPerlをWindowsで

    ちょっとすごいタイトルになってしまいましたが、 今読んでいる書籍が、UNIXのコマンドラインを使用してのPerlの解説がされている本なので、 それをWindowsでも同じようにコマンドを打っていくだけで体感できないかと思っているのですが、 無理でしょうか? コマンドプロンプトを使って、perlの処理をあれこれと試すことはできますでしょうか? Win32 GNUというシェルがウィンドウズにも存在するとのことですが、これをいれればperlをコマンドラインで実現できるのでしょうか? そもそもCUIじゃないと、 #!/usr/local/bin/perl -w というエラーチェックのwを記述しても意味がない気がするのですが、どうなのでしょう。 アドバイスお願いします。

    • ベストアンサー
    • CGI
  • PERL 宣言文 -wについて

    Perl初心者のWEBサーバエンジニアです。 サーバの移行に伴ってCGIファイルが動作していないため、ご相談になります。 【サーバ環境】 perl実行パス      /usr/local/bin/perl シンボリックリンク   /usr/bin/perl => /usr/local/bin/perl ソース記述       #!/usr/bin/perl ヴァージョン      5.8.5 perl実行環境      http://△△△.jp/cgi-bin/ ※apacheのスクリプトエイリアス指定 options +ExecCGI -Include SetHandler cgi-script 上記の環境で、cgiファイルが500internalサーバエラーになる現象が発生しています。 ファイルは以前動作したサーバから引っ張ってきました。 原因を探っていたのですが、cgiファイルのソース記述を #!/usr/bin/perl -w と記述を変更すると正常に動作しました。 -w について 【1度しか出現しない識別子や、初期化されずに参照される変数など、危険、無駄と思われる処理の警告を出力します。実際にはもっとたくさんの種類のチェックをするようです。】 と言う事はわかりましたが、いままで、-wなしで動作していたので、-wなしで動くよう、perlの設定を変更したいとかんがえております。 なにぶんPERL初心者ですので、同様の事象で知見がある方、ご教授を宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • #!/usr/local/bin/perlで命令が出せません。

    プログラミングのド素人で、独学でwindows上でcygwinを使っている者から質問させていただきます。「#!/usr/local/bin/perl」というコマンドをプログラムの先頭に書いて、[ファイル名]を入力してcygwinで命令をしたところ、命令が実行できず、「commond not found」と出てしまいました。そこで、ネット上で、いろいろ調べて、試してみたのですが、どうしても、解決できません。 どなたか、アドバイスをいただけないでしょうか? ちなみに、perl [ファイル名]では、命令を実行することができます。「type -a perl」というコマンドを入力すると、「/cygdrive/c/Perl/bin/perl」というのがでてきたので、「#!/cygdrive/c/Perl/bin/perl」というコマンドを書いても上手くいきませんでした。 ちなみに、私が書いたプログラムは、以下のようなものです。 #!/cygdrive/c/Perl/bin/perl (あるいは#!/usr/local/bin/perl) # hello -- 挨拶のプログラム print ("hello");

    • ベストアンサー
    • Perl