Использование скрипта в процессе автоматической сборки - PullRequest
3 голосов
/ 16 декабря 2010

У меня написан скрипт Powershell, который будет использоваться в процессе автоматической сборки.

Нужно ли писать код выхода 0, когда сценарий выберет правильный путь (например, не входит в блоки if, указывающие на состояние ошибки)?

Кроме того, в чем разница между выходом (с кодом) и $ host.SetShouldExit ()?

1 Ответ

4 голосов
/ 16 декабря 2010

В аналогичном сценарии я использую исключения (throw) и другие виды завершающих ошибок: в этом случае код выхода PowerShell равен 1. Если сценарий завершает сам себя (даже при отсутствии ошибок завершения), тогда код выхода PowerShell равен 0, нам не нужно вызывать exit 0. Если нам нужно что-то кроме 0 и 1, тогда мы действительно должны использовать exit или SetShouldExit (но см. Примечания ниже).

Давайте посмотрим на сценарии.

test1.ps1

'before2'
.\test2
'after2'

'before3'
.\test3
'after3'

'before4'
.\test4
'after4'

test2.ps1

'inner before 2'
exit 2
'inner after 2'

test3.ps1

'inner before 3'
$host.SetShouldExit(3)
'inner after 3'

test4.ps1

throw 'Oops'

Вывод test1.ps1:

before2
inner before 2
after2
before3
inner before 3
inner after 3
after3
before4
Oops
At ...
+ throw <<<<  'Oops'

В этом тестовом сценарии тип test4.ps1 работает, а test2.ps1 и test3.ps1 не работают (если работать означает сбой и немедленное завершение сеанса).

Вывод показывает, что exit завершает текущий скрипт, а SetShouldExit - нет.

Код выхода powershell.exe .\test1 равен 3 из-за $host.SetShouldExit(3). Я попытался отключить эту строку, чтобы проверить, делает ли exit 2 код выхода равным 2. Нет, это не так, код выхода равен 1 из-за ошибки в test4.

Я заметил еще одно отличие. Если я вызываю скрипт из интерактивной консоли PowerShell, то $host.SetShouldExit в скрипте заставляет консоль закрываться после вызова. exit нет.

Мысль. Поведение $host.SetShouldExit может зависеть от реализации хоста. Например, на одном моем собственном хосте выход вообще не поддерживается (не разрешено закрывать хост-приложение просто так), и моя реализация SetShouldExit в основном ничего не делает.

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