Это - "fork-бомба", как Вы услышали. Существует целая страница Википедии об этом.
Fork-бомба в этом случае является рекурсивной функцией, которая работает в фоновом режиме благодаря оператору амперсанда. Это гарантирует, что дочерний процесс не умирает и продолжает разветвлять новые копии функции, используя системные ресурсы. - Википедия
Короче говоря, что это делает, это создает все больше процессов (путем вызывания той же функции рекурсивно), таким образом, перегрузка системы.
Вы отметите, что функциональный идентификатор ":()", который Вы могли заменить именем и форматировать код для создания его более четким:
Путем замены функционального идентификатора и перерасположения с отступом, чтений кода:
bomb() {
bomb | bomb &
};
bomb
"Не пробуйте это дома дети". - г-н Wizard
Три кавычки не помогают, вы просто отменяете цитирование, цитируете и снова отменяете цитирование. Вам также не нужна подоболочка.
На самом деле вам нужно:
su - someuser -c 'ssh someplace "if ! grep \"some thing\" /etc/somefile; then doSomething; fi"'
Такой подход может быстро стать громоздким - подумайте о том, чтобы просто поместить сценарий на свой сервер и выполнить его. Это убережет вас от ада вложенных цитат.
Вы можете просто использовать здесь документ.
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.