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

여기서는 스크립트의 나머지 부분에 대한 작업 디렉터리가 변경되는 것을 방지하기 위해 하위 쉘에 cd및 호출을 추가로 만들었습니다 ( 실제로 그것이 필요한 이유는 확실하지 않지만).mysqlcdcd

관련된:

관련 정보