Роль канала в пакетных сценариях Windows - PullRequest
0 голосов
/ 04 октября 2018

Мой вопрос касается роли канала в пакетных сценариях Windows (CMD).

В соответствии с моим текущим пониманием, которое может быть ошибочным, конвейерные команды выполняются последовательно, и стандартный вывод предыдущей команды (если есть) используется для стандартного ввода следующей команды.

Если предыдущая команда не выдает никаких выходных данных (потому что она вышла с ненулевым уровнем ошибки или потому что она вообще не должна вырабатывать никаких выходных данных), то в следующую команду ничего не передается,и он ведет себя соответственно в зависимости от того, нуждается ли он или не нуждается ни в каком входе, чтобы работать должным образом.

Если последующая команда не требует какого-либо стандартного ввода (например, DIR), но предыдущая команда пропускает некоторые, то я ожидаю, что она будет проигнорирована.Например, в:

DIR | DIR

вывод первого DIR передается второму, который в этом не нуждается.Таким образом, второй DIR просто игнорирует ввод и выполняет то, что он должен делать, то есть печатает содержимое текущей папки в консоли.

Но если я попытаюсь:

DIR | SET x=5

, тогда переменной x не будет присвоено ничего, почему?Команде SET не требуется никакого ввода для выполнения своей работы.Так почему же он не просто игнорирует ввод от DIR и занимается своими делами?

Мои вопросы:

  1. Правильно ли я понимаю логику канала?
  2. если да, почему мы наблюдаем это поведение для SET?

Если возможно, помимо ответа, просьба также предоставить ссылку на источник, где такие темы подробно обсуждаются.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...