Что означает << $$$ в оболочке 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
на линии сам по себе. Вот как вы сигнализируете конец ввода в здесь-документе.