我必须从 powershell 在 wsl 中运行一系列命令,我偶然发现了这一点问题我正在研究,但我不能使用&&
with wsl
(wsl "ls && ls"
返回 with bash: line 1: ls && ls: command not found
,而从wsl ls && ls
运行然后从 运行)。我如何让它运行一系列命令?ls
wsl
powershell
在里面文档,在唯一答案中提到,还指出命令是从当前目录运行的,但对我来说,无论 powershell 中的当前目录是什么,wsl ls
都会返回来自的结果。但这是次要的,因为如果我可以链接多个命令以在 中运行,/
我可以使用到当前目录来克服它。cd
wsl
我还可以链接 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