使用 PowerShell 在 WSL2 / Ubuntu 22.04 中运行多个命令

使用 PowerShell 在 WSL2 / Ubuntu 22.04 中运行多个命令

我必须从 powershell 在 wsl 中运行一系列命令,我偶然发现了这一点问题我正在研究,但我不能使用&&with wsl(wsl "ls && ls"返回 with bash: line 1: ls && ls: command not found,而从wsl ls && ls运行然后从 运行)。我如何让它运行一系列命令?lswslpowershell

在里面文档,在唯一答案中提到,还指出命令是从当前目录运行的,但对我来说,无论 powershell 中的当前目录是什么,wsl ls都会返回来自的结果。但这是次要的,因为如果我可以链接多个命令以在 中运行,/我可以使用到当前目录来克服它。cdwsl

我还可以链接 wsl 命令,而不是 wsl 中的命令(如wsl ls && wsl ls),但我无法更改工作目录,因此如果第二个问题没有解决,这不是一个选择。

我已经设法通过 powershell 配置文件中的以下功能实现我的目标,但如果有更好的选择,我很乐意听到。

function getWSLPath {
    param (
        [string]$Path = (Get-Location).Path
    )

    # Replace backslashes with forward slashes
    $wslPath = $Path.Replace('\', '/')

    # Replace 'C:' with '/mnt/c', 'D:' with '/mnt/d', etc.
    $driveRegex = '^[A-Za-z]:'
    if ($wslPath -match $driveRegex) {
        $driveLetter = $wslPath.Substring(0, 1).ToLower()
        $wslPath = $wslPath -replace $driveRegex, "/mnt/$driveLetter"
    }

    return $wslPath
}

function wslHere([string] $command) {
    $path = getWSLPath
    wsl "$command" "$path"
}

答案1

您只需转义“&”符号即可使此命令生效。要使用的转义字符取决于上下文。

命令提示符(cmd)

wsl ls ^&^& ls

电源外壳

wsl ls `&`& ls

相关内容