Necesito ejecutar un script remoto usando sshvia Ruby( net / ssh ) para copiar recursivamente una carpeta y excluir una subcarpeta. Estoy buscando la forma más rápida de hacerlo, así rsyncque no es bueno. Además, entiendo que los sshusos shy no bash.
En bash hago:
cp -r srcdir/!(subdir) dstdir
y funciona bien Sin embargo, cuando inicio el script vía ssh, recibo el error
sh: 1: Syntax error: "(" unexpected
Debido a que está utilizando sh.
He revisado la shpágina del manual, pero no hay ninguna opción para excluir archivos.
¿Es mi suposición de sshusar shcorrecto? ¿Alguna sugerencia alternativa?
EDITAR 1:
en caso de que sea útil, la salida de sudo cat /etc/shellses la siguiente:
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen
EDITAR 2:
OK. Entonces bash está disponible y ese no parece ser el problema. He verificado que el ssh está usando realmente bash. El problema parece estar relacionado con el escape de paréntesis o signo de exclamación. He intentado ejecutar el comando desde el shell (macos) y este es el comando real:
ssh -i .ssh/key.pem ubuntu@X.X.X.X 'mkdir /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; cp -r /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!\(constant\) /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; ln -s /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/constant /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N/constant'
De esta manera recibo un error diferente
cp: cannot stat '/home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!(constant)': No such file or directory
EDITAR 3:
Basado en los comentarios, he cambiado mi comando agregandoextglob
Si yo uso
ssh -i .ssh/key.pem ubuntu@X.X.X.X 'shopt -s extglob; mkdir /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; cp -r /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!\(constant\) /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; ln -s /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/constant /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N/constant'
Recibo el siguiente error:
cp: cannot stat '/home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!(constant)': No such file or directory
Si no escapo del paréntesis me sale
bash: -c: line 0: syntax error near unexpected token `('
ssh(buenosshd) usa el shell de inicio de sesión del usuario remoto. Podría ser cualquier cosa.