Сбой при выводе удаленной команды ssh

Это трюк,

function openInNewTab(url) {
  var win = window.open(url, '_blank');
  win.focus();
}

В большинстве случаев это должно происходить непосредственно в обработчике onclick для ссылки, чтобы предотвратить блокирование всплывающих окон, а поведение по умолчанию «новое окно» , Вы можете сделать это так, или добавив слушателя событий к вашему объекту DOM.

Something To Click On

http://www.tutsplanet.com/open-url-new-tab-using-javascript-196/

1
задан Ben 15 January 2019 в 21:17
поделиться

1 ответ

Проблема

Цитаты ("...") не оцениваются, когда вы делаете:

$($COMMAND)

То, что видит удаленный Bash, это два аргумента: "echo и 'hello'", не echo 'hello', как вы ожидаете.

Предлагаемое решение: массивы

В вашем случае я бы предложил использовать массив:

COMMAND=( ssh localhost "echo 'hello'" )
OUTPUT=$( "${COMMAND[@]}" )

Слова в (...) являются элементами массива. В этом случае echo 'hello' виден один элемент: кавычки оцениваются сразу при назначении. Затем, когда вы делаете "${COMMAND[@]}", каждый элемент будет передан в качестве нетронутого аргумента.

Есть также несколько других способов решения этой проблемы, например, использование eval для оценки кавычек, но по моему опыту использование массивов является самым безопасным и простым способом построения и выполнения команд. С помощью массивов легко предотвратить атаки с использованием оболочки, предотвратить нежелательное расширение, предотвратить разрыв слов при наличии пробела. Единственным недостатком является то, что массивы доступны не в каждой оболочке.

Объяснение проблемы

Причина в том, что расширение (т.е. $COMMAND) не оценивает кавычки.

Это демонстрируется этим простым примером, где мы печатаем каждый аргумент по одному на строку:

$ COMMAND="ssh localhost \"echo 'hello'\""
$ for x in $COMMAND; do echo "$x"; done
ssh
localhost
"echo
'hello'"

Используя вместо этого массив:

$ COMMAND=( ssh localhost "echo 'hello'" )
$ for x in "${COMMAND[@]}"; do echo "$x"; done
ssh
localhost
echo 'hello'

С массивом, [1113 ] в одной строке (т. е. это один аргумент), с простой строкой вместо "echo и 'hello'" разделяются.

0
ответ дан Andrea Corbellini 15 January 2019 в 21:17
поделиться
Другие вопросы по тегам:

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