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 的退出代码(因此它适合无符号字节)
我在 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 - 这正是您所期望的!
与 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 的退出代码(因此它适合无符号字节)