Почему нет необходимости в `call` для возврата из вызываемого пакетного сценария, который участвует в конвейере?
Предположим, что есть пакетный файл (вызывающий), который выполняет другой пакетный файл (вызываемый),call
Команда должна использоваться, чтобы вернуться к вызывающей стороне после того, как вызываемая сторона завершит выполнение. Вот пример:
caller.bat
:
echo Calling another script...
call callee.bat
echo Returned from callee...
callee.bat
(в том же месте):
echo Being called from caller...
Вывод будет таким (без команды echos), показывающим, что выполнение вернулось, как и ожидалось:
Calling another script...
Being called from caller...
Returned from callee...
Еслиcall
команда была отклонена в вызывающей стороне, вывод будет:
Calling another script...
Being called from caller...
Но как только звонящий вовлекается в трубу (|
), нет никакой разницы в том,call
команда используется. Например:
caller.bat
(вызываемый остается без изменений):
echo Calling another script...
break | callee.bat
echo Returned from callee...
Выход будет такой, хотя нетcall
команда.
Calling another script...
Being called from caller...
Returned from callee...
В чем причина такого поведения, что заставляет выполнение возвращаться к вызывающему здесь?