Мой приказ:
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
должно быть представлено в двойных кавычках. Как это можно сделать?
решение1
У вас есть несколько уровней вложенных двойных кавычек. Это становится очень сложным, очень некрасивым и очень трудным для чтения и изменения. Например, `
ssh ${OS_USER}@${OS_HOST} \
". ~/.kshrc; ... ;
echo \"export RC_DB_INSTANCE=\\\"\\\$7\\\"\" >> RC_CONV_SET_VARS".
(ПРИМЕЧАНИЕ: я протестировал это многократное использование кавычек echo
в bash -c
своей системе, и оно сработало, но я даже не уверен на 100%, что это будет работать в ssh
. Многоуровневые кавычки и обратные косые черты — это ПИТА, и их следует избегать)
и тогда все становится еще сложнее, если RC_CONV_SET_VARS — это не буквальное имя файла, а имя переменной... еще сложнее в зависимости от того, является ли RC_CONV_SET_VARS локальным для вашей системы или для удаленной системы.
Гораздо проще написать простой одноразовый скрипт, скопировать scp
его на удаленный хост, а затем запустить его там с помощью ssh
.
Например:
Сохраните следующее как 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"
Затем scp
переместите его на удаленный хост и запустите:
scp myscript.ksh "${OS_USER}@${OS_HOST}:/tmp/"
ssh "${OS_USER}@${OS_HOST}" 'ksh /tmp/myscript.ksh'
Все еще есть проблемы с кавычками, которые нужно решить, но они примерно такие же, как и те, которые вы бы имели с кавычками при написании скрипта, который вы собираетесь запустить на локальной системе. Не уродливые, сложные и запутанные множественные уровни экранирования обратной косой черты и кавычек.
Если это кажется вам непрактичным, так как вам придется вводить пароль несколько раз, то не делайте этого — настройте аутентификацию на основе ключей ине используйте аутентификацию на основе пароля с ssh.
Кстати, вы можете передать любые необходимые аргументы в ksh myscript.sh
командной строке.
ssh "${OS_USER}@${OS_HOST}" 'ksh /tmp/myscript.ksh arg1 arg2 arg3'
или, если вам нужно передать 7-й аргументместныйскрипт к удаленному скрипту:
ssh "${OS_USER}@${OS_HOST}" "ksh /tmp/myscript.ksh \"$7\""
и измените последнюю строку myscript.ksh
выше на что-то вроде:
echo "export RC_DB_INSTANCE=\"$1\"" >> "$RC_CONV_SET_VARS"
решение2
Вам придется «экранировать» кавычки:
echo "export RC_DB_INSTANCE=\"$7\""
сделает свое дело...