Para incluir aspas duplas em uma string

Para incluir aspas duplas em uma string

Meu comando é

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"`

$7devem ser apresentados entre aspas duplas. Como pode ser feito?

Responder1

Você tem vários níveis de aspas duplas aninhadas. isso fica muito complicado, muito feio e muito difícil de ler e modificar. por exemplo `

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

(NOTA: testei isso echocom várias aspas bash -cem meu sistema e funcionou com isso, mas não tenho 100% de certeza de que funcionará em ssh. Vários níveis de aspas e barras invertidas são uma PITA e devem ser evitados)

e então fica ainda mais complicado se RC_CONV_SET_VARS não for um nome de arquivo literal, mas um nome de variável... ainda mais complicado dependendo se RC_CONV_SET_VARS é local para o seu sistema ou para o sistema remoto.

É muito mais fácil escrever um script descartável simples, scpenviá-lo para o host remoto e executá-lo lá com o ssh.

Por exemplo:

Salve o seguinte 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"

Em seguida, scpvá para o host remoto e execute-o:

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

Ainda há problemas de cotação a serem resolvidos, mas eles são praticamente os mesmos que você teria ao escrever um script que pretende executar no sistema local. Não é feio, complicado e confuso, com vários níveis de escape de barra invertida e aspas.

Se isso parecer impraticável porque você teria que digitar a senha várias vezes, não faça isso - configure a autenticação baseada em chave enão use autenticação baseada em senha com ssh.

Aliás, você pode passar quaisquer argumentos necessários na ksh myscript.shlinha de comando.

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

ou, se você precisar passar o 7º argumento dolocalscript para o script remoto:

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

e altere a última linha myscript.kshacima para algo como:

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

Responder2

Você terá que "escapar" das aspas:

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

vai fazer o truque...

informação relacionada