gpt4 book ai didi

shell - 如何从 PowerShell 命令行转义管道字符以传递到非 PowerShell 命令

转载 作者:行者123 更新时间:2023-12-02 22:21:57 25 4
gpt4 key购买 nike

我在 PowerShell 控制台 session 中,尝试运行存在于 cwd 中的 Gradle 脚本。从 PowerShell 命令行。

Gradle 命令接受一个参数,其中包括可以包含一个或多个管道字符的引号,我一生都无法弄清楚如何让 PowerShell 仅使用一行(或任意数量的行,实际上 -但我对多线解决方案不感兴趣)。

这是命令:

./gradlew theTask -PmyProperty="thisThing|thatThing|theOtherThing"

...产生此错误:
'thatThing' is not recognized as an internal or external command, operable program or batch file.

我已经尝试了所有这些变体,但没有一个起作用。任何的想法?
./gradlew theTask -PmyProperty="thisThing`|thatThing`|theOtherThing"
./gradlew theTask -PmyProperty=@"thisThing|thatThing|theOtherThing"
./gradlew theTask -PmyProperty="thisThing\|thatThing\|theOtherThing"
./gradlew theTask -PmyProperty="thisThing\\|thatThing\\|theOtherThing"
./gradlew theTask -PmyProperty="thisThing^|thatThing^|theOtherThing"

最佳答案

嗯,我发现:

首先像我最初建议的那样调用你的脚本:

./gradlew theTask -PmyProperty="thisThing^|thatThing^|theOtherThing"

然后通过添加引号修改您的 gradlew.bat 脚本:
set CMD_LINE_ARGS="%*"

问题是:现在必须在引号内调用 CMD_LINE_ARGS 否则会发生相同的错误。

所以我假设你的命令行参数不能是别的东西,我正在一个一个地处理每个参数
rem now remove the quotes or there will be too much quotes
set ARG1="%1"
rem protect or the pipe situation will occur
set ARG1=%ARG1:""=%
set ARG2="%2"
set ARG2=%ARG2:""=%
set ARG3="%3"
set ARG3=%ARG3:""=%

echo %ARG1% %ARG2% %ARG3%

输出是(对于我的模型命令):
theTask -PmyProperty "thisThing|thatThing|theOtherThing"

“=”已消失,因为它已将参数与 PowerShell 分开。如果您的命令具有标准参数解析,我想这不会成为问题。

添加任意数量的参数,但无论如何都将其限制为 9 个。

关于shell - 如何从 PowerShell 命令行转义管道字符以传递到非 PowerShell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38032316/

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