gpt4 book ai didi

powershell - Powershell等同于Linux true命令

转载 作者:行者123 更新时间:2023-12-04 08:25:42 25 4
gpt4 key购买 nike

stackoverflow answer解释了什么是Linux true命令。我的问题是,Powershell(v5 / v6)是否也提供了真正的命令?

我已经在Google周围搜索,使用了Get-help *true*,但是找不到任何相关信息。

谢谢

最佳答案

简而言之:

  • 没有与truefalse Unix实用程序等效的PowerShell。
  • 因为PowerShell的条件和错误处理与bash等类似POSIX的 shell 中的工作方式大不相同,所以不需要它们。

  • Unix实用程序 true主要用途是,在您故意忽略类似于的POSIX shell (例如0 )中上一个命令的失败(通过非零退出代码发出信号)的情况下,将退出代码重置为bash 。在有条件的情况下或在未处理失败时中止选项 set -e 生效。 true或其对应的 false都不产生任何输出-它们的唯一目的是设置退出代码。

    PowerShell本身不使用退出代码(尽管您可以使用 exit <n>为外部调用者设置退出代码),并且 的条件条件不适用于它们
  • PowerShell的自动$?变量在抽象上类似于POSIX类shell中的$?,不同之处在于它报告 bool(boolean) 值,而POSIX类shell报告退出代码。在类似POSIX的 shell 中包含$?0类似于在PowerShell中包含$?$true
  • PowerShell永远不会隐式作用于$?,但您可以在PowerShell条件中显式使用它,因此以下两个命令(为简化起见而设计)是等效的:
    # POSIX-like shells:
    # Event though the `ls` command fails `|| true` makes the overall
    # command succeed.
    if ls /nosuchfile || true; then echo success; fi

    # PowerShell:
    # `$?` would reflect `$false` after the failed `ls` command.
    # `$null = $null` is a dummy command that resets `$?` to `$true`
    # `$?` is then *output* for the `if` to test.
    if ($(ls /nosuchfile; $null = $null; $?)) { 'success' }

  • PowerShell具有 自动$true$false变量(概念上是常量),它们是 bool(boolean) 值,用于与输出(数据)进行比较,而 不是用于设置不可见状态信息(退出代码)的命令。

    请继续阅读以获取背景信息。

    类似于POSIX的shell中的条件与vs PowerShell中的

    在类似于bash之类的POSIX shell中,条件操作在命令的退出代码上运行,即(执行后)状态信息,而不是它们的输出。

    相比之下,PowerShell条件语句对命令或表达式输出(即数据)而非状态信息进行操作。

    简而言之:
  • 类似于POSIX的shell中的条件变量作用于不可见的退出代码,并通过成功输出(stdout输出)。
  • PowerShell中的
  • 条件语句作用于成功输出并在此过程中使用它。

  • 两个 shell 程序都通过错误输出(stderr)。

    如果您希望PowerShell条件可以对命令的(执行后)状态(成功与失败)进行操作:

    您可以使用 自动$?变量,其行为取决于手头的命令是PowerShell本地命令还是外部程序(例如Unix实用程序):
  • 外部程序:如果程序的退出代码为0,则$?反射(reflect)$true,否则为$false
  • 这类似于类似POSIX的 shell (例如$?)中的内置bash变量,不同之处在于那里的$?包含实际的退出代码。也就是说,在执行外部程序后,在类似于POSIX的 shell 中包含$?0与在PowerShell中包含$?$true相同。
  • 要在PowerShell中获取实际的退出代码,请使用自动$LASTEXITCODE变量,该变量反射(reflect)最近执行的外部程序的退出代码(PowerShell本地命令通常不设置退出代码,尽管您可以在脚本中使用exit <n>,主要用于向外部 call 者报告退出代码)。
  • PowerShell本机命令(cmdlet,函数,脚本):如果该命令从根本上没有失败并且没有写入PowerShell的错误流(例如$?),则$trueWrite-Error;请注意,默认情况下,外部程序的stderr输出不会写入PowerShell的错误流)。
  • 注意,因此$?不一定告诉您给定命令是否认为其整体执行成功。 $?$false仅告诉您仅报告了某些错误。
  • 但是,您可以将命令调用包装在try { ... } catch { ... }语句中,这可以帮助区分非终止错误和终止错误(默认情况下,只有后者会触发catch块);

  • 在PowerShell的中不常见使用 $?,因为故障通常是通过 -ErrorAction公用参数/ $ErrorActionPreference首选项变量和/或 try { ... } catch { ... }语句来处理的。

    就是说,这些方法不能在 外部程序上使用,其中 测试$?$LASTEXITCODE是必须使用来检测故障。
    This GitHub discussionthis RFC draft调用可将外部程序与PowerShell的错误处理更好地集成。

    有关PowerShell错误处理的全面概述,请参见 this GitHub issue

    关于powershell - Powershell等同于Linux true命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55357792/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com