次のコマンドを実行します。
mysql -u root -p < load_data.sql > output.tab
この-pフラグは、mysql クライアント (C プログラム) に、パスワードを入力するためのインタラクティブなプロンプトをユーザーに提供するように指示します。
私の知る限り、このような入力は通常、プロンプトを書き込んでから、標準入力から行を読み取るstderrような呼び出しをブロックすることで処理されます。gets
しかし、シェルはすでにファイルを開き、mysql クライアントの をそのファイル記述子にload_data.sql設定しています。したがって、ファイルから最初の行を取得するだけで呼び出すべきではありませんか?stdingets
私が最初に考えたのは、プログラムは行を読み取る前に最後までシークするということでしたが、パイプではそのようにシークすることはできません!
では、これはどのように機能するのでしょうか。何か魔法はありますか?