Что означает << $$$ в оболочке Unix? - PullRequest
0 голосов
/ 14 мая 2018

Я использую 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' << $$$

Мне было интересно, что означает << $$$. 1006 *

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

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

1 Ответ

0 голосов
/ 14 мая 2018

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

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

utility <<MARKER
document
content
goes here
MARKER

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

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

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

Если вы введете

somecommand <<stuff

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

...