2013-04-26 3 views
1

원격 서버에서 로컬로 데이터베이스를 마이그레이션하는 bash 스크립트를 작성하려고합니다. 우리 서버 중 하나는 불행하게도 Windows 서버입니다. freesshd를 설치 했으므로 ssh를 사용할 수 있습니다.bash 스크립트를 사용하여 원격 Windows 서버에서 SSH를 통해 Mysqldump를 실행하십시오.

나는 나의 우분투 쉘에서이 프로그램을 실행할 때 : 그것은 잘 실행하고베이스를 덤프

sshpass -p 'my_password' ssh [email protected] 
    'C:/wamp/bin/mysql/mysql5.1.36/bin/mysqldump 
    -u root -pmypassword mybase --result-file=C:/wamp/outfiles/mybase.sql' 

. 불행히도 내가 bash 스크립트에서 똑같은 것을 할 때 - 나는 permission denied 피드백을 받았습니다. 왜? 스크립트와 일반 셸 명령의 명령간에 차이가 있습니까?

이 내 bash는 스크립트는 지금 : 작은 따옴표 '로 인용

#!/bin/bash 

remoteHost=$1 
remoteUser=$2 
echo -n "Provide remote db password: " 
read -s remoteDbPass 
echo "" 
echo -n "Provide remote server password: " 
read -s remotePass 
echo "" 
dbName=$3 
localDbName=$4 
dumpPath=/var/lib/mysql/dumps/ 
winMysqlPath=C:/wamp/bin/mysql/mysql5.1.36/bin/ 
winDumpPath=C:/wamp/outfiles/ 

sshpass -p '$remotePass' ssh [email protected]$remoteHost '${winMysqlPath}mysqldump -u root -p$remoteDbPass $dbName --result-file=$winDumpPath$dbName.sql' 
pscp -pw $remotePass [email protected]$remoteHost:$winDumpPath$dbName.sql $dumpPath$dbName.sql 
mysql $localDbName < $dumpPath$dbName.sql 

답변

2

변수는 확장되지 않습니다. 대신 큰 따옴표 "을 사용하십시오.

+0

나는 회의적이었다. 왜냐하면 선을 에코 할 때'''내부에서 바뀌기 때문이다. 왜냐하면'''사이에 있기 때문이다. 고마워! – Joe

관련 문제