Para incluir aspas duplas em uma string

0

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

$7 deve ser apresentado entre aspas duplas. Como isso pode ser feito?

    
por Peck 02.06.2016 / 09:06

2 respostas

1

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=\\"\\\\"\" >> RC_CONV_SET_VARS".

(NOTA: eu testei o multi-aspas de echo com bash -c no meu sistema, e ele funcionou com isso, mas eu nem tenho 100% de certeza que funcionará em ssh . Vários níveis de citações e barras invertidas são um PITA e devem ser evitadas)

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

É muito mais fácil escrever um simples script descartável, scp it para o host remoto e, em seguida, executá-lo com 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, scp 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 citar ao escrever um script que pretende executar no sistema local. Não são feios, complicados e confusos com vários níveis de escape de contrabando e citações.

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 e não use autenticação baseada em senha com ssh .

BTW, você pode passar qualquer argumento que precisar na linha de comando ksh myscript.sh .

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

ou, se você precisar passar o sétimo argumento do script local para o script remoto:

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

e altere a última linha de myscript.ksh acima para algo como:

echo "export RC_DB_INSTANCE=\"$1\"" >> "$RC_CONV_SET_VARS"
    
por 02.06.2016 / 12:05
-1

Você terá que "escapar" das citações:

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

fará o truque ...

    
por 02.06.2016 / 09:52

Tags