какой язык программирования требуется для разработки ОС Linux? [Закрыто]

У вас несколько уровней вложенных двойных кавычек. Это становится очень сложным, очень некрасивым и очень трудным для чтения и изменения. например, `

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.

BTW, вы можете передавать любые необходимые вам args в командной строке 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"
0
23.04.2014, 21:13
0 ответов

Теги

Похожие вопросы