如何使用动态数量的参数创建 PowerShell 函数,每个参数都将传递给另一个命令?

肯尼83

标题是不言自明的。这是我迄今为止尝试过的:

function Git {
    $cmd = $args[0]
    for ($i = 1; $i -lt $args.count; $i++) {
        $cmd = $cmd + " " + $args[$i]
    }
    echo $(wsl git $cmd)
}

然而调用 eggit clone <clone URL>给了我git: 'clone <clone URL>' is not a git command. See 'git --help'.所以看起来好像 PowerShell 正在将一个带引号的字符串传递给git命令,这导致它失败......或者我的代码是否存在其他一些我遗漏的问题?

希望这些信息足以让任何 PowerShell 专家为我指明正确的方向……尽管要了解我的实际核心问题以及我为尝试修复它所做的工作,请继续阅读……

核心问题/现有解决方案

我正在尝试将git在 PowerShell 或 CMD 窗口中键入的所有命令重定向到 WSL,因为这是我唯一git安装的地方,我想保持这种方式当我已经在 WSL 中安装了我需要的所有东西时,我认为安装适用于 Windows 的 Git 或任何其他大型第三方工具是没有意义的。

唯一的缺点是:

  1. 对于每天多次键入此类命令的人来说wsl git...,每次我想克隆、拉、推等时都打字变得很麻烦而且很快就会很累
  2. 它还破坏了我的 Windows VS Code 安装中的 Git 扩展,没有安装 Git for Windows。

对于这些问题,我尝试了两种现有的解决方案,即https://github.com/hangxingliu/wslgithttps://github.com/andy-5/wslgit,但它们都给了我相同的错误消息:

PS C:\Users\Kenny> git --version
/usr/bin/wslgit.sh: line 83: cd: C:\Users\Kenny: No such file or directory
fatal: can not cd to C:\Users\Kenny (C:\Users\Kenny)

有关更多信息,另请参阅前 repo 中这个看似相关的 GitHub 问题

我正在运行 Windows 10.0.19042.0,即 Windows 10 Home 的最新稳定版本。此版本或先前版本中肯定有一些重大更改,因为前 repo 的所有者在链接问题页面上的评论中引用了这一点:

我已经更新了 wslgit.dev.sh 一点。首先mount -t drvfs=> 什么都不返回,它发生在更新到 2004 年之后。所以我更新了 wslgit.dev.sh 文件......现在它对我有用。之后,生成新的wslgit.sh并更改旧的。

我已经尝试过他们的建议,但它似乎对我或问题的 OP 都没有帮助。因此,我深入研究了编写自定义 PowerShell 函数以实现类似结果的整个兔子洞。

我现在已经浪费了一整天来尝试解决这个看似简单的问题(整个上午都在尝试使现有解决方案正常工作,其余时间都在 PowerShell 解决方法上)。因此,我非常感谢:

  1. 对现有解决方案提供给我的错误消息的解释和修复,或
  2. 一个可以执行我想要的工作的 PowerShell 函数,而无需向已经过长的命令 (IMO) 添加详细的参数名称或其他任何内容。
NotTheDr01ds

args直接传递数组似乎对我有用,如:

function Git {
    echo $(wsl git $args)
}

至少对于您提到的简单克隆案例(和一个简单的Git status)。

虽然听起来这主要是您所需要的,但未来的读者应该意识到,对于更复杂的用例,这可能会失败,例如需要用户输入的任何 git 命令、使用本地 Windows 路径作为目标,或者在 UNC 路径上(包括\\WSL$\)在执行时。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将参数从一个Powershell函数传递给另一个

将参数从另一个 powershell 脚本传递给一个 powershell 脚本

如何将switch参数传递给另一个PowerShell脚本?

如何让 PowerShell 逐行读取并将其传递给另一个命令?

如何将 Powershell 命令的输出用作另一个 Powershell 命令的参数?

如何将函数的所有参数传递给另一个命令?

将参数传递给另一个函数

将命名参数从一个Powershell脚本传递到另一个

在命令行开关的另一个变量/参数中使用 Powershell 变量

如何将可变函数参数作为参数传递给另一个函数?

如何将可变参数函数的其余参数传递给另一个函数?

此函数如何将参数传递给另一个内部函数参数

如何将参数传递给作为另一个函数参数的函数

将具有不同数量参数的函数传递给另一个函数C ++

将具有任意数量参数的任何函数传递给另一个函数

将一个函数的所有参数传递给另一个函数

将一个函数传递给另一个函数的参数

PHP 将一个函数作为参数传递给另一个函数

将一个函数传递给另一个参数未知的函数

一个函数作为参数传递给另一个函数

Python:如何使用动态数量的参数创建参数网格

如何将命令输出作为多个参数传递给另一个命令

如何将终端命令作为参数传递给另一个命令

将函数参数动态传递给另一个函数

如何在PowerShell中将参数从一个函数转发到另一个函数

使用模板可变参数将多个参数传递给另一个函数

如何使用 rebol/red bind 将块参数传递给另一个函数?

如何使用参数将powershell脚本调用到另一个powershell脚本?

从作为参数传递给JavaScript的另一个函数的函数中提取参数