2011-07-08 6 views
5

Estoy intentando crear un script de implementación simple para mis aplicaciones de PHP. Sé que hay varias herramientas para este trabajo (Capistrano, Phing, etc.), pero me parecen mucho trabajo para mi sencilla rutina de implementación.Escape de comillas al usar SSH

Uso sshpass para evitar escribir mi contraseña una y otra vez. Pero después de cargar mi instalador comprimido, necesito ingresar al servidor y ejecutar algunos comandos. Uno de los cuales es sed. Entonces, las citas están rompiendo mi guión. Es algo como esto:

 
sshpass -p foo ssh [email protected] " 
    cd /www/htdocs/foo/bar 
    echo 'Untar and remove installer' 
    tar -zxf install.tar.gz 

    sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');" index.php > tmp && mv tmp index.php 
    sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');/" admin/index.php > tmp && mv tmp admin/index.php 

" 

Como se puede ver, yo uso comillas dobles para comenzar mis declaraciones SSH, pero también tengo que utilizarlos en sed.

Cualquier sugerencia sería muy apreciada. ¡Gracias!

Respuesta

6

El escape de las comillas internas es la forma normal. ¿Esto no funciona?

sshpass -p foo ssh [email protected] " 
cd /www/htdocs/foo/bar 
echo 'Untar and remove installer' 
tar -zxf install.tar.gz 

sed \"s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');\" index.php > tmp && mv tmp index.php 
sed \"s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');/\" admin/index.php > tmp && mv tmp admin/index.php 

" 
+0

Sí! Esto funciona perfecto! ¡Gracias! – fedeisas

2

Puede un documento interno utilizarse en su lugar ?:

sshpass -p foo ssh [email protected] <<DATA 
    cd /www/htdocs/foo/bar 
    echo 'Untar and remove installer' 
    tar -zxf install.tar.gz 

    sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');" index.php > tmp && mv tmp index.php 
    sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');/" admin/index.php > tmp && mv tmp admin/index.php 
DATA 
+0

también, use '<<" DATA "' si no desea expansión variable dentro del documento aquí – sehe

+2

Esto funciona, pero arroja una advertencia: El pseudo-terminal no se asignará porque stdin no es un terminal. – fedeisas

Cuestiones relacionadas