适用于 Linux 的 Powershell:将命令与管道符号结合起来不起作用
Posted
技术标签:
【中文标题】适用于 Linux 的 Powershell:将命令与管道符号结合起来不起作用【英文标题】:Powershell for Linux: Combining commands with pipe sign doesn't work 【发布时间】:2022-01-23 21:19:04 【问题描述】:有什么方法可以在 Powershell for Linux 中连接命令?
这就是我要运行的:
pwsh -Command Invoke-ScriptAnalyzer -Path . | ConvertTo-Json | Out-File -FilePath "/home/administrator/scripts/test.json"
因此,运行 Invoke-ScriptAnalyzer,将结果转换为 Json 并将结果保存到 test.json。
它无法识别 | 之后的任何内容签到:
./test.sh: line 1: ConvertTo-Json: command not found
./test.sh: line 1: Out-File: command not found
我需要将其放入 bash 脚本中,因此需要使用 -Command 选项启动 pwsh。
有什么想法吗?
谢谢
【问题讨论】:
【参考方案1】:正如所写,您的|
符号由您的 Linux shell(例如 bash
)解释,不是由 PowerShell 解释。
有两种解决方案:
最好引用整个-Command
参数(在POSIX 兼容的shell 中,'...'
字符串,例如bash
使用字符串的内容逐字):
pwsh -Command 'Invoke-ScriptAnalyzer -Path . | ConvertTo-Json | Out-File -FilePath "/home/administrator/scripts/test.json"'
或者,单独\
-逐字转义您希望通过的所有Linux-shell元字符,例如\|
和\"
在这种情况下:
pwsh -Command Invoke-ScriptAnalyzer -Path . \| ConvertTo-Json \| Out-File -FilePath \"/home/administrator/scripts/test.json\"
注意:在这种情况下,pwsh
在-Command
之后接收多个 参数。但是,PowerShell 只是在将结果解释为 PowerShell 代码之前加入它们。
这与 POSIX 兼容 shell 的命令行处理不同,后者将 first post--c
参数解释为隐式的临时 script,并带有 附加参数作为逐字参数传递到该脚本,可以像往常一样访问$1
,...
【讨论】:
以上是关于适用于 Linux 的 Powershell:将命令与管道符号结合起来不起作用的主要内容,如果未能解决你的问题,请参考以下文章
powershell Powershell尝试捕获,仅适用于v2
powershell 适用于PS Core的Windows PowerShell模块
适用于 Linux 的 Windows 子系统安装指南 (Windows 10) (微软官方文档)
powershell 适用于标准版和企业版的SharePoint PowerShell许可证映射
Powershell:如何在未连接的计算机上安装适用于 PowerShell 的 Nuget 提供程序,以便可以从 PS 命令行安装 nuget 包?