Может ли кто-нибудь объяснить этот синтаксис?

Я использовал RVM некоторое время, и каждый раз, когда я просто копировал и вставлял следующую команду, чтобы настроить его:

bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

Мне кажется, что я не полностью понимаю синтаксис, и почему нам нужны двойные < и круглые скобки. Может кто-нибудь объяснить это или указать мне на правильную ссылку?

Ответы

Ответ 1

Первый - это перенаправление ввода. Он подает содержимое файла в программу в качестве ввода. Вторая конструкция <() и перенаправление процесса: она обрабатывает вывод процесса, например файла. В этом случае эффект заключается в том, что вы будете запускать содержимое этого URL-адреса, как если бы это было bash script - очень опасно! Если вы не доверяете источнику полностью, не делайте этого. Злоумышленник может использовать этот метод для запуска команд, которые могут поставить под угрозу вашу систему.

Ответ 2

Только мои 2 цента. Структура Bashs <(), поскольку @Daenyth заявляет, что "обрабатывает вывод процесса как файла". Эта структура может быть очень полезна. Просто подумайте о следующем:

 diff <(ls dir1) <(ls dir2)

Это будет использовать vimdiff, чтобы показать различия между содержимым dir1 и dir2. Использование vimdiff вместо diff будет еще более холодным.