2

データベースにクエリを実行し、結果をファイルにパイプする bash スクリプトがあります。

date=`date +"%Y/%m/%d"`

/usr/bin/mysql -u $db_user -p$db_pass -h $db_name $db_schema << MYSQLEOF > $output_file

  select *
  from table
  where date = $date

MYSQLEOF

再利用性/直交性のために、このプロジェクトを他の領域に拡大しています。クエリを独自のファイルに格納し、次のように呼び出したいと思いました。

cmd=`echo $sql_file`

/usr/bin/mysql -u $db_user -p$db_pass -h $db_name $db_schema -e "$cmd" > $output_file

SQL ファイル:

  select *
  from table
  where date = $date

SQLファイル内で変数($ date)を保持および調整できる一方で、(bashで)これを行う方法を見つけるのに苦労しています。.sql ファイルを bash 変数にエコーすると、「$date」をリテラル文字列として取得できませんでした。

bash に解決策はありますか、それとも perl などを調べてこれを処理する必要がありますか?

4

2 に答える 2

1

mySQL CLI のsourceコマンドを使用します。

queryfile=my_query.sql
/usr/bin/mysql -u $db_user -p$db_pass -h $db_name $db_schema -e "source $queryfile" > $output_file
于 2012-11-15T19:25:32.610 に答える
1

コマンドラインPerlを使用してその場で検索/置換するソリューションを見つけました。

バッシュスクリプト:

date=`date +"%Y/%m/%d"`
export date

cmd=`perl -lpe 's/DATE_VAR/$ENV{date}/g' "$sql_file"`

/usr/bin/mysql -u $db_user -p$db_pass -h $db_name $db_schema -e "$cmd" > $output_file

そしてsql_fileで:

select *
from table
where date = 'DATE_VAR'
于 2012-11-15T20:50:08.333 に答える