GNU/Linux >> Linux の 問題 >  >> Linux

bash から mysql クエリをフィードする方法

あなたの試みがうまくいかなかった理由は、 < ファイル名が必要で、文字列を与えました。あなたは次のようなことをしなければならないでしょう

echo "YOURQUERYSTRINGHERE">tmpfile
mysql --host=localhost --user=user --password=password dbname <tmpfile

ケンの提案

 mysql  --host=localhost --user=user --password=password -e "QUERY" dbname

動作しますが、クエリで bash 変数を使用しようとすると、パラメーター展開に違反する可能性があります。例

QUERY="select * from $MYTABLE WHERE name=\"[email protected]\";"
mysql --host=localhost --user=user --password=password -e "$QUERY" mydbname

期待どおりに動作しない可能性があります。1 つのオプションは使用です

echo "$QUERY"|mysql --host=localhost --user=user --password=password mydbname

これは、クエリ文字列に適切な引用符が含まれている場合に機能します。もう 1 つのオプションは、dogbane が提案する「here」ドキュメントです。


次のようなヒア ドキュメントを使用してみてください:

mysql --host=localhost --user=user --password=password << END

CREATE USER 'testuser'@'localhost' IDENTIFIED BY  'jakdJxct8W';
CREATE DATABASE IF NOT EXISTS 'testuser_dev' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON  'testuser_dev' . * TO  'testuser'@'localhost';
CREATE DATABASE IF NOT EXISTS 'testuser_qa' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON  'testuser_qa' . * TO  'testuser'@'localhost';

END

または、すべてのコマンドをテキスト ファイルに配置して実行します。

mysql --host=localhost --user=user --password=password < commands.sql

このようにしてみてください:

echo "select 1" | mysql

mysql --batch --silent -e 'SHOW TABLES';

出力をパイプする予定がある場合は、バッチとサイレントが便利です


Linux
  1. LinuxでBashの履歴から特定のコマンドをクリアする方法

  2. Bashの配列から一意の値を取得するにはどうすればよいですか?

  3. bash履歴から重複を削除するにはどうすればよいですか?

  1. Linuxコマンドラインから直接MySQL/MariaDBクエリを実行する方法

  2. Bashの文字列/配列から一意の要素の配列を作成するにはどうすればよいですか?

  3. BashスクリプトからTmuxセッションに参加しているかどうかを確認するにはどうすればよいですか?

  1. ある mysql データベースから別の mysql データベースにテーブルをコピーする方法

  2. bashでリストから要素を取得する方法は?

  3. bashからネットマスクを取得するには?