Я знаю, для чего >>
он используется, он записывает все сообщения в файл вместо экрана. И я думаю <<
сделать обратное, я попробую это и получу сообщение:<< was unexpected at this time.
Скажите, пожалуйста, для чего <<
и как использовать.
источник
Я знаю, для чего >>
он используется, он записывает все сообщения в файл вместо экрана. И я думаю <<
сделать обратное, я попробую это и получу сообщение:<< was unexpected at this time.
Скажите, пожалуйста, для чего <<
и как использовать.
Стандартная команда оболочки для Windows - cmd.exe
- не использует <<
оператора на всех .¹
Один <
означает «читать файл в стандартный ввод » cmd.exe
, но два <
символа подряд не имеют смысла cmd.exe
, поэтому он дает ошибку, которую вы получили.
<<
Оператор является значимым для всех основных типов командной оболочки Unix , где он используется для здесь-документов : ²
$ some-command <<END
blah blah blah
blah blah
blah blah blah blah blah
END
Эти три строки отправляются some-command
на стандартный ввод.
Это полезно для отправки большого количества текста в команду без предварительной записи его в файл, как это было бы с <
оператором. Я часто использую его для встраивания сообщения об использовании в скрипт:
#!/bin/sh
if [ -z "$1" ]
then
cat <<USAGE
usage: myscript <files...>
Grobbles the foobie for all files given on the command line.
USAGE
exit 1
fi
# ... do something with command line arguments
Это лучше, чем писать кучу echo
утверждений, поскольку текст heredoc отформатирован точно так, как он выводится на экран. Кроме того, в этом контексте легче иметь дело с пробелами, цитированием, перенаправлением и интерполяцией переменных. Обратите внимание, например, на то, что я использовал угловые скобки в сообщении об использовании без необходимости делать что-то умное, чтобы оболочка не пыталась использовать их для перенаправления ввода / вывода.
Если вы хотите делать подобные вещи в Windows, вы можете установить Cygwin и использовать один из его оболочек. Если вы используете Windows 10, вы можете использовать WSL .
Примечания:
Эта ссылка идет в архивированное дерево документации Windows XP. Microsoft разорвала ссылку, которую я использовал ранее, когда они заархивировали эти документы, поэтому на случай, если они разорвут ее, приведу резервную копию сторонней ссылки.
Единственный другой cmd.exe
справочный материал, который мне известен на microsoft.com, - это PDF-файл «Команды Windows» (4,9 МБ, 948 страниц), в котором содержится лишь небольшая справка по большинству (!) Встроенных и предоставляемых Microsoft внешних команд. Вы можете дать по cmd
подсказке. Этот PDF неполный по двум причинам. Во-первых, и наиболее актуально, здесь нет совместного обсуждения того, как перенаправление работает в cmd.exe
оболочке; нет даже обсуждения грамматики оболочки. Во- вторых, список команд формата PDF является неполным: первое , что я случайно проверки не распространяется: diskpart
.
Я считаю , что все это следует из четких попыток Microsoft, чтобы заменить cmd.exe
с помощью PowerShell , которые уже на протяжении многих лет. В последнем обновлении Windows 10 на момент написания этой статьи они предприняли дальнейшие шаги, чтобы скрыть существованиеcmd.exe
, хотя оно еще не полностью исчезло.
Стоит отметить, что PowerShell также не поддерживает <<
оператор перенаправления . Также - в печальной регрессии от обеих оболочек Unix и cmd.exe
- он не поддерживает <
перенаправление!
Канонический способ начать здесь-документ, как я уже писал выше, без пробела между <<
словом и разделителем. Мое неясное воспоминание состоит в том, что все случаи использования здесь документов, которые я видел в сценариях оболочки, также выполняются таким образом. Спецификация POSIX для здесь-документов также использует этот стиль в своих примерах.
Однако внимательное прочтение других частей спецификации POSIX.1-2008 показывает, что допустимо помещать некоторое количество пробелов или символов табуляции между <<
словом и разделителем. В частности, см. Правила распознавания токенов 7 и 10 , определение io_here
в грамматике оболочки и определение «пустого» класса символов .
Вот как вы документируете оболочку. Делайте заметки, Microsoft. ;)
Тестирование здесь на Bash 4 и ksh93
подтверждает, что это работает, как ожидалось.
Есть
>
и>>
только<
нет<<
Источник: http://ss64.com/nt/syntax-redirection.html
источник
>
пишет в новый файл.>>
добавляет в файл<
читает из файла|
отправляет вывод команды на вход другой командыСм. Здесь список. Является ли ввод% ^ into cmd.exe пасхальным яйцом Windows?
С тех пор, как это было опубликовано, это было добавлено.
источник