Как передать созданные переменные окружения через 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 -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? Что она выведет и почему?
>[оверквотинг удален]
> ...а вот тут закрылась, и потом открылась новая.
>> echo 'Файл $opt_select_sw_file скопирован на сервер'
> Тут и несколько раз дальше фокус повторяется.
> Это я к тому, что, во-первых, пример, скорее всего, нерабочий (не вчитывался
> в суть). А во-вторых, открытие и закрытие кавычек можно использовать себе
> на пользу. Хотите, чтобы переменные сначала разворачивались в свои значения, а
> потом уже значения подставлялись в команду? Тогда не заключайте их в
> одинарные кавычки. Подробности, как обычно, в man sh.
>$ echo 'foo $bar'"$PATH"'$foo bar'
> Сколько здесь аргументов у команды echo? Что она выведет и почему?Дело в том, что мне в одной и той же строке нужно и переменные передать из текущего окружения, и выполнить команду в удаленном окружении.
вот простейший пример>> cd $REMOTE_TMP_DIR
> Дело в том, что мне в одной и той же строке нужно
> и переменные передать из текущего окружения, и выполнить команду в удаленном
> окружении.
> вот простейший пример
>>> cd $REMOTE_TMP_DIR
>>$ echo 'foo $bar'"$PATH"'$foo bar'
>> Сколько здесь аргументов у команды echo? Что она выведет и почему?Гм... Отвечаю сам себе, раз уж... Аргумент здесь только один. Строки $foo и $bar будут выведены буквально (и их интерпретация будет зависеть от дальнейших действий, то есть от "удалённого окружения"), потому что они внутри одинарных кавычек. А вместо $PATH будет выведено значение этой переменной "из текущего окружения", потому что она внутри кавычек двойных.
PS. man sh и ворох статей о программировании на shell решат все ваши проблемы.
HY>> Дело в том, что мне в одной и той же строке нужно
>[оверквотинг удален]
>>>> cd $REMOTE_TMP_DIR
>>>$ echo 'foo $bar'"$PATH"'$foo bar'
>>> Сколько здесь аргументов у команды echo? Что она выведет и почему?
> Гм... Отвечаю сам себе, раз уж... Аргумент здесь только один. Строки $foo
> и $bar будут выведены буквально (и их интерпретация будет зависеть от
> дальнейших действий, то есть от "удалённого окружения"), потому что они внутри
> одинарных кавычек. А вместо $PATH будет выведено значение этой переменной "из
> текущего окружения", потому что она внутри кавычек двойных.
> PS. man sh и ворох статей о программировании на shell решат все
> ваши проблемы.спасибо!