Я читал некоторые команды наExplainshell.comи найдите интересную команду:
:(){ :|:& };:
В настоящее время я работаю над ней OSX
, и единственная ссылка на нее, которую я смог найти, была на builtin
странице руководства ( man builtin
), но это не помогло, поскольку там указано только, является ли она внешней командой, cshell или sh.
Command External csh(1) sh(1)
! No No Yes
% No Yes No
. No No Yes
: No Yes Yes
Итак, что же делает исполнение :
?
На терминале у меня нет вывода:
$ :
$
решение1
В этом случае :
не является командой, а является именем функции, которую вы определяете. Команда :(){ :|:& };:
— это то, что называется «forkbomb» — это последовательность команд, которая определяет функцию с именем :
, сообщает оболочке, что функция состоит из вызова :
, передачи вывода другому экземпляру :
и перевода второго экземпляра в фоновый режим. Последняя ;:
последовательность завершает определение функции и затем вызывает ее. Каждый вызов :
приводит к запуску еще двух копий :
, так быстро, как оболочка может их порождать.
Это приведет к использованию всех системных ресурсов, что в конечном итоге приведет к замедлению или сбою системы, если не установлено ограничение процесса.
решение2
Если вынепереопределить :
, имеет значение по умолчанию как no-op. Вы можете посмотреть его документацию с помощьюhelp :
% help :
:: :
No effect; the command does nothing. A zero exit code is returned.
Легенда гласит, что давным-давно, на заре интернета, это был способ вставить текст в скрипты оболочки, которые не будут выполнены. Что-то вроде комментария, другими словами. У меня нет письменного источника для этого.