使用 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则将被拆分为至少两个单词。这会在bash.

要解决此问题,请引用全部变量扩展(特别$dbpass是密码通常包含特殊字符):

if [ "$1" = "import" ]; then
  ( cd "$dbpath" &&
    ./mysql -u "$dbuser" -p"$dbpass" "$dbname" <"$currdir/$exname.sql" )
fi

在这里,我另外在子 shell 中进行了cdmysql调用,以防止更改脚本其余部分的工作目录(尽管目前cd还不清楚为什么您实际上需要它)。cd

有关的:

相关内容