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
최소 두 단어로 분할됩니다. 이것은 에 있을 것입니다 bash
.
이 문제를 해결하려면 견적을 보내주세요.모두변수 확장(특히 $dbpass
비밀번호에 특수 문자가 포함되는 경우가 많기 때문에):
if [ "$1" = "import" ]; then
( cd "$dbpath" &&
./mysql -u "$dbuser" -p"$dbpass" "$dbname" <"$currdir/$exname.sql" )
fi
여기서는 스크립트의 나머지 부분에 대한 작업 디렉터리가 변경되는 것을 방지하기 위해 하위 쉘에 cd
및 호출을 추가로 만들었습니다 ( 실제로 그것이 필요한 이유는 확실하지 않지만).mysql
cd
cd
관련된: