如何从powershell获取远程服务器上执行的程序的返回码?

问题描述 投票:0回答:1

非常重要,这是powershell特定的。

这个问题有很多变体的答案,其答案是使用单引号而不是双引号

例如

ssh me@server "invalid_program; echo $?"
->
ssh me@server 'invalid_program; echo $?'

这在带有 openssh 的 powershell 中的 Windows 上是不可能的。 https://stackoverflow.com/a/75740191/8652920

鉴于有一个限制,我必须仅使用双引号进行 ssh,有没有办法仍然强制在远程进行环境变量扩展?

您可以在 powershell 上尝试此操作。

PS C:\...> ssh me@remote "beep; echo $?"
Warning: Permanently added 'remote' (ECDSA) to the list of known hosts.
bash: beep: command not found
True

标准输出应该是 127,而不是 True。

% ssh me@remote 'beep; echo $?'
Warning: Permanently added 'remote' (ED25519) to the list of known hosts.
127
bash: beep: command not found
powershell ssh environment-variables openssh
1个回答
0
投票

$
both PowerShell 和 POSIX 兼容 shell(例如
bash
)中的元字符,并且在这两个 shell 中,
"..."
是一个 expandable,即 interpolating 字符串。

因此,在

ssh me@remote "beep; echo $?"
中,是 PowerShell 预先扩展了
$?
,使用 its 定义的
$?
的当前值,这是一个 Boolean 值。

© www.soinside.com 2019 - 2024. All rights reserved.