Что делает команда ":"?

Что делает команда ":"?

Я читал некоторые команды на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.

Легенда гласит, что давным-давно, на заре интернета, это был способ вставить текст в скрипты оболочки, которые не будут выполнены. Что-то вроде комментария, другими словами. У меня нет письменного источника для этого.

Связанный контент