Что означает << $$$ в оболочке Unix?

Я использую google-http-client для проекта на работе, и когда я делаю несколько запросов, у меня на консоли напечатано следующее.

curl -v --compressed -X POST -H 'Accept-Encoding: gzip' -H 'User-Agent: Google-HTTP-Java-Client/1.23.0 (gzip)' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -d '@-' -- 'http://example.com' << $$$

Мне было интересно, что << $$$ имею в виду.

Если я пытаюсь запустить эту команду в терминале Linux, кажется, что << $$$ заставляет консоль ждать больше ввода. Если это так, как я могу указать терминалу, что я сделал подачу на него входов?

Позднее редактирование: я нашел, что аргументы завиток -d @- подразумевает, что данные будут красного цвета от стандартного ввода.

1 ответ

Решение

Это "документ здесь" с необычным маркером конца.

Документ здесь представляет собой тип перенаправления, и обычно выглядит

utility <<MARKER
document
content
goes here
MARKER

То есть он подает документ, разделенный MARKER утилите на ее стандартный ввод.

Это как utility <file где file содержит строки в here-документе, за исключением того, что оболочка будет выполнять расширение переменных и подстановку команд в тексте документа (этого можно избежать, заключив маркер в кавычки: \MARKER или же 'MARKER' в начале).

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

Если вы печатаете

somecommand <<stuff

в оболочке оболочка ожидает, что вы передадите остальное содержимое документа here, а затем слово stuff на линии сам по себе. Вот как вы сигнализируете конец ввода в здесь-документе.

Другие вопросы по тегам