Para incluir comillas dobles dentro de una cadena

Para incluir comillas dobles dentro de una cadena

mi comando es

X=`ssh ${OS_USER}@${OS_HOST} ". ~/.kshrc ;
   ulimit -c unlimited ;
   cd ${OS_PATH}/NEW_BL1_RC_RATE/bin/conf;
   echo "export RC_DB_INSTANCE=$7" >> RC_CONV_SET_VARS"`

$7debe presentarse entre comillas dobles. ¿Cómo se puede hacer?

Respuesta1

Tiene varios niveles de comillas dobles anidadas. eso se vuelve muy engañoso, muy feo y muy difícil de leer y modificar. por ejemplo `

ssh ${OS_USER}@${OS_HOST} \
    ". ~/.kshrc; ... ;
     echo \"export RC_DB_INSTANCE=\\\"\\\$7\\\"\" >> RC_CONV_SET_VARS".

(NOTA: probé las comillas múltiples echoen bash -cmi sistema y funcionó con eso, pero ni siquiera estoy 100% seguro de que funcionará en ssh. Múltiples niveles de comillas y barras invertidas son un PITA y deben evitarse)

y luego se vuelve aún más complicado si RC_CONV_SET_VARS no es un nombre de archivo literal sino un nombre de variable.... aún más complicado dependiendo de si RC_CONV_SET_VARS es local para su sistema o para el sistema remoto.

Es mucho más fácil escribir un script simple y desechable, scpenviarlo al host remoto y luego ejecutarlo allí con ssh.

Por ejemplo:

Guarde lo siguiente como myscript.ksh:

#! /usr/bin/ksh
. ~/.kshrc
ulimit -c unlimited
cd ${OS_PATH}/NEW_BL1_RC_RATE/bin/conf
echo 'export RC_DB_INSTANCE="$7"' >> "$RC_CONV_SET_VARS"

Luego, scpvaya al host remoto y ejecútelo:

scp myscript.ksh "${OS_USER}@${OS_HOST}:/tmp/"
ssh "${OS_USER}@${OS_HOST}" 'ksh /tmp/myscript.ksh'

Todavía hay problemas con las citas por resolver, pero son más o menos los mismos que tendría con las citas al escribir un script que pretende ejecutar en el sistema local. No hay múltiples niveles feos, complicados y confusos de barras invertidas y comillas.

Si esto parece poco práctico porque tendría que escribir la contraseña varias veces, entonces no lo haga: configure la autenticación basada en claves yno use autenticación basada en contraseña con ssh.

Por cierto, puedes pasar cualquier argumento que necesites en la ksh myscript.shlínea de comando.

ssh "${OS_USER}@${OS_HOST}" 'ksh /tmp/myscript.ksh arg1 arg2 arg3'

o, si necesita pasar el séptimo argumento dellocalscript al script remoto:

ssh "${OS_USER}@${OS_HOST}" "ksh /tmp/myscript.ksh \"$7\""

y cambie la última línea de myscript.ksharriba a algo como:

echo "export RC_DB_INSTANCE=\"$1\"" >> "$RC_CONV_SET_VARS"

Respuesta2

Tendrás que "escapar" de las comillas:

echo "export RC_DB_INSTANCE=\"$7\""

hará el truco...

información relacionada