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
devem 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 echo
com várias aspas bash -c
em 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, scp
enviá-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, scp
vá 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.sh
linha 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.ksh
acima 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...