非常重要,这是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
$
是 both PowerShell 和 POSIX 兼容 shell(例如 bash
)中的元字符,并且在这两个 shell 中,"..."
是一个 expandable,即 interpolating 字符串。
因此,在
ssh me@remote "beep; echo $?"
中,是 PowerShell 预先扩展了 $?
,使用 its 定义的 $?
的当前值,这是一个 Boolean 值。