如何禁用/覆盖PowerShell点符号

ih99xse1  于 2022-09-20  发布在  Shell
关注(0)|答案(1)|浏览(154)

PowerShell中的命令几乎类似于Bash,但是点符号扩展给我带来了很多工作。目前,我必须用引号将许多命令参数括起来:

.mvnw.cmd -Dmaven.repo.local=.m2/repository deploy:deploy-file -Durl=http://zippo:8081/repository/grinch/ -DrepositoryId=nexus -DgroupId=com.zippo -DartifactId=test -Dversion=1.0 -Dpackaging=jar -Dfile=test-1.0.jar

vbl.成为

.mvnw.cmd -D"maven.repo.local"=".m2/repository" deploy:deploy-file -Durl=http://zippo:8081/repository/grinch/ -DrepositoryId=nexus -DgroupId="com.zippo" -DartifactId=test -Dversion="1.0" -Dpackaging=jar -Dfile="test-1.0.jar"

如何禁用点表示法,或者重写点运算符,用其他东西替换它,等等?

abithluo

abithluo1#

如何禁用点表示法?

  • 问题不是点符号,是PowerShell解析要传递给外部程序的参数的错误**:像-foo.bar这样的标记被分成两个参数,-foo.bar-参见GitHub issue #6291(意外复制:GitHub issue #15541);这只是several related bugs中的一个,目前至少是PowerShell 7.2.6。
  • 确实需要引用来解决这个问题,但您可以简化,方法是将每个受影响的参数*作为一个整体包含在'...'**中(或"...",如果需要字符串插补):
.mvnw.cmd '-Dmaven.repo.local=.m2/repository' 'deploy:deploy-file' -'Durl=http://zippo:8081/repository/grinch/' '-DrepositoryId=nexus' -'DgroupId=com.zippo' '-DartifactId=test' '-Dversion=1.0' '-Dpackaging=jar' '-Dfile=test-1.0.jar'

备选方案

  • 您可以使用停止解析令牌--%,它消除了引用的需要,但请注意其许多限制,特别是无法(直接)将PowerShell变量和表达式合并到命令中-有关详细信息,请参阅this answer

# --% passes the remainder of the command line as-is to the target program

.mvnw.cmd --% -Dmaven.repo.local=.m2/repository deploy:deploy-file -Durl=http://zippo:8081/repository/grinch/ -DrepositoryId=nexus -DgroupId=com.zippo -DartifactId=test -Dversion=1.0 -Dpackaging=jar -Dfile=test-1.0.jar
  • 您可以**通过cmd /c**调用,在这种情况下,您可以引用您的整个命令行,从而避免了解析错误;请注意,cmd.exe转发的任何输出都会根据[Console]::OutputEncoding中存储的字符编码进行解码,因此除非mvnw使用此编码作为其输出,否则您可能需要(暂时)先将[Console]::OutputEncoding设置为实际编码。
cmd /c '.mvnw.cmd --% -Dmaven.repo.local=.m2/repository deploy:deploy-file -Durl=http://zippo:8081/repository/grinch/ -DrepositoryId=nexus -DgroupId=com.zippo -DartifactId=test -Dversion=1.0 -Dpackaging=jar -Dfile=test-1.0.jar'

相关问题