我很抱歉,如果标题不完全描述我在找什么。 请尽可能编辑。
我有一个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"