mysqlを使用してデータベースをインポートしたい(MAMPを使用して実行)
#! /bin/bash
# variables
currdir=$PWD
dbname=TEST
dbuser=root
dbpass=root
dbpath="/applications/MAMP/Library/bin"
exname=database
if [ "$1" = "import" ]
then
cd $dbpath
./mysql -u $dbuser -p$dbpass $dbname < $currdir/$exname.sql
fi
私のスクリプトとファイルがmysql binとは異なるボリュームにある場合
line 31: $currdir/$exname.sql: ambiguous redirect
エラーです。同じボリュームにある場合、インポートは機能します。権限エラーですか?すべての変数によって提供される値をエコーし、空ではなく、まずファイルを変数として読み込みます。
value=$(<$exname.sql)
$valueはファイルの内容を保存するのに機能しませんか? CDですか? CDを使わずにmysqlを直接実行してみました。
# cd $dbpath
/applications/MAMP/Library/bin/mysql -u (...)
しかし、それも動作しません。
ベストアンサー1
これを防ぐには、変数拡張を引用する必要があります。
- その値を別の単語に分割します。
- 結果の単語にワイルドカードを使用するファイル名(おそらくあなたの場合は問題にはなりません)。
$PWD
スペースが含まれていて、IFS
変数にデフォルト値(スペース、タブ、改行)がある場合は、$currdir/$exname.sql
少なくとも2つの単語に分割されます。これはになりますbash
。
この問題を解決するには、見積もりを送信してください。みんな変数拡張(特に$dbpass
パスワードに特殊文字が含まれることが多いため):
if [ "$1" = "import" ]; then
( cd "$dbpath" &&
./mysql -u "$dbuser" -p"$dbpass" "$dbname" <"$currdir/$exname.sql" )
fi
ここでは、スクリプトの残りの部分に作業ディレクトリが変更されないようにするために、サブシェルとcd
呼び出しを追加しました(実際にそれが必要な理由はわかりませんが)。mysql
cd
cd
関連: