Выход из скрипта по exit
Доброго времени суток!
В примерах часто встречаю завершение пакетного файла путем перевода указателя на конец скрипта, например:
Код:
@echo off
ver | find "5.1.2600" goto winXP
goto end
:winXP
echo This is Microsoft Windows XP
...
:end
А если я использую exit для выхода, будет какая разница?
Код:
@echo off
ver | find "5.1.2600" goto winXP
exit
:winXP
echo This is Microsoft Windows XP
...
|
Цитата:
Цитата rene
А если я использую exit для выхода, будет какая разница? »
|
Вы можете указать число — код возврата (он же ErrorCode, он же ErrorLevel), который может быть использован родительским процессом или пакетным файлом.
|
greg zakharov |
20-06-2017 16:33 2746126 |
Дело не только в коде возврата, но и корректном закрытии потока с помощью exit и высвобождению сопутсвующих ресурсов, в то время как вызов goto, во-первых, без особой надобности просто портит код, во-вторых, не посылает явным образом сигнал консоли, что все, мол, пора заквадрачиваться. Примерно так. И да, лучше указывать в батах exit /b, чтобы ненароком не закрыть саму консоль (если еще в ней предполагается работать).
|
Цитата:
Цитата greg zakharov
корректном закрытии потока с помощью exit и высвобождению сопутсвующих ресурсов, в то время как вызов goto … не посылает явным образом сигнал консоли, что все, мол, пора заквадрачиваться. »
|
Что с exit, что без — по достижении конца пакетного файла его обработка будет завершена. Не могу понять это Ваш посыл.
|
greg zakharov |
20-06-2017 17:17 2746137 |
Iska, не мне Вас учить что cmd - та же программа (интерпретатор), оперирующая данными, под которые, если заглянуть под "капот" также выделяется место в памяти и прочее в этом духе. Оператор goto спректирован несколько кривовато, а потому его использование лучше ограничить областью видимости самого командного файла, а не как инструкцию выхода из последнего.
|
Всё равно не пойму. Вы имеете в виду, что в командный процессор после завершения пакетного файла по exit, по goto :eof и просто по завершении кода пакетного файла освобождает разное количество ранее выделенной на его исполнение оперативной памяти, так?
|
greg zakharov, если говорить о проектировании ПО, то корректнее все ветви завершения алгоритма собирать в одну точку выхода, или хотя бы группировать по результативности. Поэтому goto end - это хорошо, а раскиданные по коду exit и goto :eof - плохо.
|
greg zakharov |
20-06-2017 20:18 2746176 |
Iska, нет. По goto ресурсы освобождаются с некоторой задержкой.
Busla, проектирование ПО и сценарии командной строки - суть разные вещи.
|
Время: 22:47.
© OSzone.net 2001-