powershell - 调用表达式的替代方案
问题描述
我有这个功能:
function traced()
{
write-host "$args"
invoke-expression -Command "$args"
}
我在几个地方使用它,traced cp "$($_.FullName)" (join-path $directory $newfile)
这样我就有了所有被复制(或删除,或其他)地方的日志
但是当目录包含空格和破折号时,它会导致调用表达式抛出。
我想我可以定义traced-cp
and traced-rm
,但是如果我有很多要跟踪的函数,那么通用答案是什么?我只想要一个打印,然后评估它给出的确切命令的函数。据我了解,&
操作员不是我想要的——它不适用于 shell 内置。
解决方案
考虑使用参数 splatting 来构建您的命令,而不是使用Invoke-Expression
. 我也不知道您在哪里听说过&
不适用于 shell 内置程序,但它适用于命令和 cmdlet。
这是有关在 Powershell 中溅射的 Microsoft 官方文档。
这种方法还消除了正确制作命令字符串、必须转义字符和处理路径空格的困难——使用带有命名或位置参数的喷溅可以为您解决大部分问题。
推荐阅读
- javascript - 用打字稿反应 useState
- python - * 符号在 python 中是否具有数据类型?
- google-drive-api - 我无法在 Google Colab 中安装我的另一个驱动器
- gcc - 注意:以下浮点异常发出信号: IEEE_UNDERFLOW_FLAG IEEE_DENORMAL
- php - Php 需要根据获得的百分比订购 div
- jenkins - Jenkins Build 失败了。映像已创建,但 Pod 未启动
- android - 为什么 Android drawable 不显示为列表项背景?
- c# - Microsoft DI:如果两个不同的类在其构造函数参数中采用相同的类型,我如何从配置中为它们注入不同的值?
- ruby-on-rails - 设计模型无法保存到数据库中
- sql - 关键字“ELSE”不断导致语法错误