Чтобы включить двойные кавычки в строку

Чтобы включить двойные кавычки в строку

Мой приказ:

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

сделает свое дело...

Связанный контент