powershell return 值 $?和自定义退出代码

powershell return value $? and custom exit code

我在 Linux-Box 上安装了 powershell。 在我的 *.PS1 文件末尾,我放置了以下代码:

Exit 2222

我运行我的ps1文件如:

pwsh-lts -File my.ps1 

但是我无法访问2222,我该如何访问它?

Bash 通过 $? 变量反映最后存在的代码。

让我们试一试(我在 WSL2 上的 Ubuntu 上使用 bash,但您会在任何 little-endian 上的 bash 中发现相同的行为平台):

mathias@laptop:~/test$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal
mathias@laptop:~/test$ echo $SHELL
/bin/bash
mathias@laptop:~/test$ echo $?
0
mathias@laptop:~/test$ pwsh -Command 'exit 2222'
mathias@laptop:~/test$ echo $?
174

所以 $? returns 的值为 174,而不是 2222 - 这正是您所期望的!

一样,基础值的大小是一个无符号字节,这意味着它的值将被截断为 8 位,从而得到值 174。如果将两个值都转换为二进制字符串,则可以观察到这一点:

mathias@laptop:~/test$ pwsh -Command '2222,174 |% {[convert]::ToString($_, 2).PadLeft(16, "0")}'
0000100010101110
0000000010101110
#       ^^^^^^^^
# Notice how the least significant 8 bits are the same

这就是你的答案:

  • 读取 bash 中的最后一个退出代码:计算 $?
  • 为避免值被截断:选择一个 < 255 的退出代码(因此它适合无符号字节)