URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9369
[ Назад ]

Исходное сообщение
"Как передать переменные по ssh"

Отправлено musinov , 30-Янв-12 03:23 
Как передать созданные переменные окружения через ssh сессию на удаленный хост. При передаче команд подходят только одинарные кавычки, так как иначе часть команд для удаленного хоста выполняется локально. Может опцией SendEnv как-то можно? Подскажите, пожалуйста, кто в курсе.

Вот кусок кода:
ssh -q root@$IP_ADRS -p 22 '
            cd $REMOTE_TMP_DIR
            REMOTE_SW_FILE_CHECK="`md5sum -c $opt_select_sw_file.md5`"
            COUNT_CHAR_IN_FILE="`ls $opt_select_sw_file | tr -d [:space:] | wc -m`"
               if [ "${REMOTE_SW_FILE_CHECK:$[$COUNT_CHAR_IN_FILE + 2]:2}" = 'OK' ]; then
               echo 'Файл $opt_select_sw_file скопирован на сервер'
               cp ${REMOTE_TMP_DIR}${opt_select_sw_file} /data/dc/
               echo '***'
               echo 'Файл ${opt_select_sw_file} скопирован в папку /data/dc/.'
               echo '***'
               echo 'Готово.'
               echo '***'
               exit
            else
               echo 'File $opt_select_sw_file: checksum error.'
               md5sum -c $opt_select_sw_file.md5 > MD5_ERROR
               cat MD5_ERROR
               echo 'Файл скопирован с ошибками.'
               exit
            fi'


Содержание

Сообщения в этом обсуждении
"Как передать переменные по ssh"
Отправлено XAnder , 30-Янв-12 09:28 
> ssh -q root@$IP_ADRS -p 22 '

Тут кавычка открылась...

> cd $REMOTE_TMP_DIR
> REMOTE_SW_FILE_CHECK="`md5sum -c $opt_select_sw_file.md5`"
> COUNT_CHAR_IN_FILE="`ls $opt_select_sw_file | tr -d [:space:] | wc -m`"
>    if [ "${REMOTE_SW_FILE_CHECK:$[$COUNT_CHAR_IN_FILE + 2]:2}" = 'OK' ]; then

...а вот тут закрылась, и потом открылась новая.

>    echo 'Файл $opt_select_sw_file скопирован на сервер'

Тут и несколько раз дальше фокус повторяется.

Это я к тому, что, во-первых, пример, скорее всего, нерабочий (не вчитывался в суть). А во-вторых, открытие и закрытие кавычек можно использовать себе на пользу. Хотите, чтобы переменные сначала разворачивались в свои значения, а потом уже значения подставлялись в команду? Тогда не заключайте их в одинарные кавычки. Подробности, как обычно, в man sh.

$ echo 'foo $bar'"$PATH"'$foo bar'

Сколько здесь аргументов у команды echo? Что она выведет и почему?

"Как передать переменные по ssh"
Отправлено musin , 30-Янв-12 14:08 
>[оверквотинг удален]
> ...а вот тут закрылась, и потом открылась новая.
>>    echo 'Файл $opt_select_sw_file скопирован на сервер'
> Тут и несколько раз дальше фокус повторяется.
> Это я к тому, что, во-первых, пример, скорее всего, нерабочий (не вчитывался
> в суть). А во-вторых, открытие и закрытие кавычек можно использовать себе
> на пользу. Хотите, чтобы переменные сначала разворачивались в свои значения, а
> потом уже значения подставлялись в команду? Тогда не заключайте их в
> одинарные кавычки. Подробности, как обычно, в man sh.
>
$ echo 'foo $bar'"$PATH"'$foo bar'

> Сколько здесь аргументов у команды echo? Что она выведет и почему?

Дело в том, что мне в одной и той же строке нужно и переменные передать из текущего окружения, и выполнить команду в удаленном окружении.
вот простейший пример

>> cd $REMOTE_TMP_DIR


"Как передать переменные по ssh"
Отправлено XAnder , 30-Янв-12 14:58 
> Дело в том, что мне в одной и той же строке нужно
> и переменные передать из текущего окружения, и выполнить команду в удаленном
> окружении.
> вот простейший пример
>>> cd $REMOTE_TMP_DIR
>>
$ echo 'foo $bar'"$PATH"'$foo bar'

>> Сколько здесь аргументов у команды echo? Что она выведет и почему?

Гм... Отвечаю сам себе, раз уж... Аргумент здесь только один. Строки $foo и $bar будут выведены буквально (и их интерпретация будет зависеть от дальнейших действий, то есть от "удалённого окружения"), потому что они внутри одинарных кавычек. А вместо $PATH будет выведено значение этой переменной "из текущего окружения", потому что она внутри кавычек двойных.

PS. man sh и ворох статей о программировании на shell решат все ваши проблемы.


"Как передать переменные по ssh"
Отправлено musin , 30-Янв-12 15:16 
HY>> Дело в том, что мне в одной и той же строке нужно
>[оверквотинг удален]
>>>> cd $REMOTE_TMP_DIR
>>>
$ echo 'foo $bar'"$PATH"'$foo bar'

>>> Сколько здесь аргументов у команды echo? Что она выведет и почему?
> Гм... Отвечаю сам себе, раз уж... Аргумент здесь только один. Строки $foo
> и $bar будут выведены буквально (и их интерпретация будет зависеть от
> дальнейших действий, то есть от "удалённого окружения"), потому что они внутри
> одинарных кавычек. А вместо $PATH будет выведено значение этой переменной "из
> текущего окружения", потому что она внутри кавычек двойных.
> PS. man sh и ворох статей о программировании на shell решат все
> ваши проблемы.

спасибо!