Intentando sincronizar archivos de un servidor a otro en una sesión de pantalla. En lugar de escribir el comando largo cada vez, decidí poner un script Bash. Sin embargo, cuando lo ejecuto, aparece un Missing trailing-" in remote-shell command.
error.
Preguntándose qué va mal en el guión.
root@127.0.0.1:~# /raid/data/module/bin/rbk.sh Movies /raid/data/Movies rsync_target/
/raid/data/module/bin/screen -S Movies
/opt/bin/rsync --rsh="ssh -p 10022 -c des"\
--rsync-path="/opt/bin/rsync" --inplace --progress -a -vv \
/raid/data/Movies sys@192.168.1.15:/raid/data/rsync_target/
Missing trailing-" in remote-shell command.
rsync error: syntax or usage error (code 1) at main.c(361) [sender=3.0.5]
El script hace eco de lo que hará primero y luego ejecutó el comando. A continuación se muestra un volcado de mi script:
#!/bin/bash
SCREEN="/raid/data/module/bin/screen"
SCREENOPT="-S"
SCREEN_TITLE=$1
RSYNC="/opt/bin/rsync"
RSYNCOPT="--rsh=\"ssh -p 10022 -c des\" --rsync-path=\"/opt/bin/rsync\" --inplace --progress -a -vv"
SOURCE=$2
REMOTE_USER="sys@"
REMOTE_HOST="192.168.1.15"
REMOTE_BASE=":/raid/data/"
REMOTE_TARGET=$3
echo ${SCREEN} ${SCREENOPT} ${SCREEN_TITLE}
echo ${RSYNC} ${RSYNCOPT} ${SOURCE} ${REMOTE_USER}${REMOTE_HOST}${REMOTE_BASE}${REMOTE_TARGET}
${RSYNC} ${RSYNCOPT} ${SOURCE} ${REMOTE_USER}${REMOTE_HOST}${REMOTE_BASE}${REMOTE_TARGET}
run_rsync() { /opt/bin/rsync "--rsh=\"ssh -p 10022 -c des\" --rsync-path=\"/opt/bin/rsync\" --inplace --progress -a -vv" $1 $2 } run_rsync ${SOURCE} ${REMOTE_USER}${REMOTE_HOST}${REMOTE_BASE}${REMOTE_TARGET}
(Lo sé, esto es bastante antiguo, pero sigue siendo uno de los primeros enlaces al buscar "Falta el final-" en el comando de shell remoto ")El laberinto de comillas escapadas y sin escape en tus
$RSYNCOPT
confusiones me saca de quicio; No me sorprende que confunda rsync, y / o ssh, y / o el shell local o remoto.Puede haber una manera de hacer que esto funcione agregando o eliminando barras diagonales inversas, pero sugiero la siguiente solución alternativa en su lugar:
Reemplazar:
por:
Probé una versión ligeramente simplificada de su script en mi sistema y obtuve el mismo mensaje de error que usted; esta solución lo corrigió.
fuente
Usar el archivo de configuración ssh también es una opción válida. Esto es lo que puede poner / agregar a su
~/.ssh/config
archivo:También puede filtrar estos parámetros por host remoto al anteponer estas líneas
Host xyz.domain.whatever
y aplicarles sangría:fuente