mysqlを使用する他のボリュームであいまいなリダイレクトエラー

mysqlを使用する他のボリュームであいまいなリダイレクトエラー

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

これを防ぐには、変数拡張を引用する必要があります。

  1. その値を別の単語に分割します。
  2. 結果の単語にワイルドカードを使用するファイル名(おそらくあなたの場合は問題にはなりません)。

$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呼び出しを追加しました(実際にそれが必要な理由はわかりませんが)。mysqlcdcd

関連:

おすすめ記事