Можно ли избежать кавычек внутри escape-кавычек внутри escape-кавычек внутри escape-кавычек?

Это - "fork-бомба", как Вы услышали. Существует целая страница Википедии об этом.

Fork-бомба в этом случае является рекурсивной функцией, которая работает в фоновом режиме благодаря оператору амперсанда. Это гарантирует, что дочерний процесс не умирает и продолжает разветвлять новые копии функции, используя системные ресурсы. - Википедия

Короче говоря, что это делает, это создает все больше процессов (путем вызывания той же функции рекурсивно), таким образом, перегрузка системы.

Вы отметите, что функциональный идентификатор ":()", который Вы могли заменить именем и форматировать код для создания его более четким:

Путем замены функционального идентификатора и перерасположения с отступом, чтений кода:

bomb() { 
  bomb | bomb & 
}; 
bomb

"Не пробуйте это дома дети". - г-н Wizard

4
27.01.2019, 02:13
2 ответа

Три кавычки не помогают, вы просто отменяете цитирование, цитируете и снова отменяете цитирование. Вам также не нужна подоболочка.

На самом деле вам нужно:

su - someuser -c 'ssh someplace "if ! grep \"some thing\" /etc/somefile; then doSomething; fi"'

Такой подход может быстро стать громоздким - подумайте о том, чтобы просто поместить сценарий на свой сервер и выполнить его. Это убережет вас от ада вложенных цитат.

3
27.01.2020, 20:52

Вы можете просто использовать здесь документ.

su -someuser -c '<&1 >&2 ssh you@machine sh' 1<<\SCRIPT
    if   ! grep 'some spaces or whatever' /etc/somefile
    then : do something
    fi
#END
SCRIPT

Решение требует небольшого подтасовки fd, потому что вам нужно обойти начальный пароль, считанный из su , а su не будет передавать какие-либо файловые дескрипторы выше 2 Но как только вы аутентифицируете su , ssh не будет зависать с вводом-выводом, поэтому вы можете выполнить переназначение немедленно и позволить вашей вызванной оболочке на другом конце прочитать stdin.

3
27.01.2020, 20:52

Теги

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