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"