Откройте окно командной строки, введите find "blah"
и нажмите Введите ; вы увидите, что он ожидает ввода пользователя / клавиатуры / консоли, на который указывает STDIN (нажмите Ctrl + Z и Enter , чтобы завершить запрос). Затем наберите echo blah
и нажмите Введите ; вы заметите, что напечатан текст blah
, поэтому есть вывод на дисплей / консоль; на это указывает STDOUT . Канал |
берет данные в STDOUT из левой команды и перенаправляет их в STDIN для правой команды.
Теперь введите explorer
в окно командной строки; Конечно, появляется окно проводника, но что происходит в командной строке? правильно, ничего, он не ожидает ввода в STDIN . Таким образом, вы можете подключиться к нему, но ему все равно, поскольку он не читает в STDIN . Фактически, приложения GUI обычно не используют STDIN и STDOUT , потому что эти вещи предназначены для приложений командной строки.
Еще один пример: в команде Окно подсказки, введите echo C:\Windows
; совершенно очевидно, что произойдет; затем введите echo C:\Windows| dir
; что случается? dir
возвращает содержимое текущего каталога, но не C:\Windows
. Зачем? Что ж, давайте сначала наберем dir
и посмотрим, что произойдет: да, dir
показывает содержимое текущего каталога, а не ожидает ввода консоли; поэтому с правой стороны канала он получает данные по адресу STDIN , но ему просто все равно. Вы можете попробовать использовать dir "C:\some\other\folder"
, без и с конвейером, вывод будет таким же, STDIN здесь игнорируется.
Пример echo
/ dir
также демонстрирует разница между консольным вводом ( STDIN ) и аргументами или параметрами командной строки: таким аргументом является путь в командной строке dir "C:\some\other\folder"
, и вы не можете заменить его данными из STDIN . Чтобы понять, почему, вам нужно различать guish между время анализа (когда команда считывается и анализируется интерпретатором) и время выполнения (когда команда фактически выполнено): аргументы уже должны присутствовать во время синтаксического анализа, в то время как STDIN актуален только во время времени выполнения , что позже. Таким образом, мы можем сказать, что они просто никогда не встречаются.
Это также отражает ситуацию с вашей попыткой cd | explorer
: последний принимает аргументы командной строки (которые в любом случае должны быть доступны перед выполнением , поэтому во время синтаксического анализа), но его не волнует STDIN . Также данные STDOUT из cd
недоступны перед выполнением (но только во время выполнения), поэтому в любом случае они будут доставлены слишком поздно ...