0

NET_SSH を使用して SSH 接続を介して mysql データベースに接続しようとしています。読み取りと書き込みで対話型シェルを使用しています。

私のコードは次のようになります。

echo '<pre>';
        $ssh -> setTimeout(10);
        echo $ssh -> read('');

        $ssh -> write('ls');
        echo $ssh -> read('');
        echo '<br />';

        $string = 'mysql -u '. $database -> database_user . ' -h ' . $database -> datbase_host . ' --password=' . $database -> database_password . ' ' . $database -> database_name. '; show databases;';
        $ssh -> write($string);
        echo $ssh -> read('mysql>');
        echo '<br />';

        $this -> write('show databases;');

        echo $ssh -> read('');
        echo '<br />';

しかし、私の出力は次のようになります。

    lsubuntu@ip-xxxxxx:~$ ls
    Last login: Fri Dec 28 16:08:39 2012 from ool3.dyn.optonline.net

    mysql -u db_user -h xxx.us-east-1.rds.amazonaws.com --password=abc123 my_database; show databases;ubuntu@ip-xxxxxx:~$ mysql -u db_user -h xxx.rds.amazonaws.com --password=abc123 my_database; show databases;
    Last login: Fri Dec 28 16:08:49 2012 from ool3.dyn.optonline.net

show databases;ubuntu@ip-10-151-4-222:~$ show databases;

私の質問は、なぜ私が思っていたようにインタラクティブにならないのですか? 予想される結果は、mysql 接続または少なくとも mysql プロンプトであると言わざるを得ません。しかし、私はそれを理解しています。私は何か間違ったことをしていますか?

4

1 に答える 1

1

正直なところ、私はそれを完全に書き直します。例えば。

echo '<pre>';
        echo $ssh -> read('[prompt]');

        $ssh -> write("ls\n");
        echo $ssh -> read('[prompt]');
        echo '<br />';

        $string = 'mysql -u '. $database -> database_user . ' -h ' . $database -> datbase_host . ' --password=' . $database -> database_password . ' ' . $database -> database_name. '; show databases;';
        $ssh -> write("$string\n");
        echo $ssh -> read('mysql>');
        echo '<br />';

        $this -> write("show databases;\n");

        echo $ssh -> read('mysql>');
        echo '<br />';

read('') を使用するのは、プロンプトが何であるかを理解するときだけです。

また、すべての書き込み要求を \n で終了する方法にも注意してください。Linux は AJAX 化されたサーバーではありません。コマンドを入力するだけで、それが実行されることを期待するわけではありません。入力する必要があります。

つまり、キーを押すと、Enter キーを押さなくても実行できる場合があります。viのいくつかの状況のように。(挿入モードではなく) 通常モードで、開いているテキスト ファイルで dd を押すと、Enter キーを押さなくても、現在の行全体が削除されます。

于 2012-12-29T06:44:30.513 に答える