bash:将多行读入ssh时使用外部variables

我很抱歉,如果标题不完全描述我在找什么。 请尽可能编辑。

我有一个bash脚本,执行以下操作:

serveruser="root" serverip=1.2.3.4 serverpath="/var/www" ssh "$serveruser"@"$serverip" /bin/bash <<\EOF mkdir -p "$serverpath/mysqldumps/" cd "$serverpath/mysqldumps/" domainname=somedomain.com mysqldump -h 192.168.1.4 -udba -ppassword -c --add-drop-table --add-locks --create-options --databases --quick --lock-tables $domainname > $domainname.sql EOF 

我的问题是,我“喂”给ssh多行不parsing我设置的variables。 这显然是因为variables没有在远程机器上设置,只能在我的本地shell中设置。 我怎么能通过这些variables或可能传递多个线路以不同的方式ssh?

你在逃避这里doc文字的方式是防止variablesreplace。 对比

 cat <<\END $PATH $LOGNAME END 

 cat <<END $PATH $LOGNAME END 

更新

仔细观察,我发现你正在为heredoc设置一个variables。 这应该在本地机器上扩展,所以你需要转义mysqldump命令中的那些。 尝试这个:

 ssh "$serveruser"@"$serverip" <<EOF mkdir -p "$serverpath/mysqldumps/" cd "$serverpath/mysqldumps/" domainname=somedomain.com mysqldump -h 192.168.1.4 -udba -ppassword -c --add-drop-table --add-locks --create-options --databases --quick --lock-tables \$domainname > \$domainname.sql EOF 

你需要引用整个命令..并且不需要引用像$ {var}那样的variables,

 serveruser="root" serverip=1.2.3.4 serverpath="/var/www" ssh ${serveruser}@${serverip} "/bin/bash <<\EOF mkdir -p ${serverpath}/mysqldumps/ cd ${serverpath}/mysqldumps/ EOF"