Escape bash переменная в узле через SSH - PullRequest
0 голосов
/ 13 февраля 2020

При выполнении команды bash в узле и передаче параметра Dynami c, стандартный способ go - использовать spawn и избегать экранирования. То есть:

const filename = 'file with spaces'
spawn('ls', [filename]) // All good, received 'file with spaces'

Это надежно, поскольку имя файла передается в качестве отдельной переменной bash.

Теперь, что произойдет, если я захочу сделать то же самое через s sh ? Ниже приведена опция , а не :

const filename = 'file with spaces'
spawn('ssh', [host, 'ls', filename]) // Wrong!! Received 'file' 'with' 'spaces'

S sh принимает ls и filename в качестве vargars. Присоединение к нему и выполнение, которое побеждает цель.

1 Ответ

0 голосов
/ 13 февраля 2020

Один из способов - передать значение с использованием base64, которое содержит ожидаемые символы, а затем экранировать в bash

spawn('ssh', [host, 'ls', `"$(echo ${btoa(filename)} | base64 -d)"`])
...