Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Экранирование специалных символов для аргументов SSH команды

#unix #shell #символы #экранирование


Задача:


Переменная, содержит в конце $$

$ a='SYS_$$'

$ echo $a

SYS_$$

Тут разворачивает $$ в конце строки как номер процесса, а надо отобразить строку
"SYS_$$", передаваемую как параметр.

$ echo "echo \$1" | ssh another_host "/bin/sh -s $a"

SYS_18992


    


Ответы

Ответ 1



Попробуйте так: $ a='SYS_$$' $ echo 'echo $1' | ssh another_host "/bin/sh -s '$a'" SYS_$$ При вызове ssh, внутри двойных кавычек одиночные кавычки тетряют своё специальное назначение и переменная $а будет замещена её значением, т.е. $SYS_$$. Далее, при вызове sh на удалённом хосте, одиночные кавычки вновь приобретают своё специальное назначение и препятствуют замещению $$ текущим pid.

Ответ 2



надо передать символы одинарных кавычек вокруг аргумента, с которым вызывается программа sh. для этого надо добавить перед кавычками символы \: $ v='a$$'; echo 'echo $1' | ssh хост sh -s \'$v\' a$$

Комментариев нет:

Отправить комментарий