我需要在 MS Windows 上工作,但更喜欢使用适用于 Linux 的 Windows 子系统 (WSL) 或使用 Powershell 在 BASH shell 中工作。 Powershell 有一个巧妙的功能,如果您在提示符下使用向前
/
编写了路径并按 Tab,它会将这些路径转换为向后 \
。
虽然有时这很方便,但它也可能对我不利,因为我喜欢使用
& wsl [linux-tool] [arguments]
在 Powershell 中运行 Linux 工具(例如 grep、awk、vim 等)。在这种情况下,Linux 工具确实需要转发 /
。同样,如果我将 Windows 资源管理器中的路径复制粘贴到 WSL 终端的 BASH 中,我需要手动将 \
转换为 /
。如果有一个热键可以在提示时提供的任何路径上的 /
和 \
之间交替,那就更方便了。
有人知道最简单的方法吗?
我也为这项任务而苦苦挣扎。 我没有找到一个现有的功能,它不是相当冗长或没有潜在的陷阱。
我个人的解决方案是在我的Linux ~/.bashrc 文件中注册一些别名命令,例如
# Function to convert path to Windows format
win() {
local path="${1:-$(pwd)}" # Use the provided argument or the current directory (pwd)
if [[ "$path" =~ ^/ ]]; then
# Convert Linux path to Windows path
wslpath -w "$path"
else
# Assume it's already a Windows path
echo "$path"
fi
}
# Function to convert path to Linux format
lin() {
local path="${1:-$(pwd)}" # Use the provided argument or the current directory (pwd)
if [[ "$path" =~ ^[a-zA-Z]:\\ ]]; then
# Convert Windows path to Linux path
wslpath "$path"
else
# Assume it's already a Linux path
echo "$path"
fi
}
# Aliases for convenience
alias win='win'
alias lin='lin'
注册了这些,就意味着当你使用WSL终端时,你可以使用:
$ win
\\wsl.localhost\Ubuntu\home\username
$ lin
/home/username
$ win "/home/username"
\\wsl.localhost\Ubuntu\home\username
$ lin "\\wsl.localhost\Ubuntu\home\username"
\wsl.localhost\Ubuntu\home\username
然后,为了在 powershell 中工作,您可以通过执行以下操作,将函数添加到您的配置文件中以访问您的 wsl 函数:
Test-Path $PROFILE
New-Item -ItemType File -Path $PROFILE -Force
notepad $PROFILE
function win {
param([string]$path)
$escapedPath = $path -replace '\\', '\\'
wsl bash -ic "win '$escapedPath'"
}
function lin {
param([string]$path)
$escapedPath = $path -replace '\\', '\\'
wsl bash -ic "lin '$escapedPath'"
}
. $PROFILE
>win
C:\Users\username
>lin
/mnt/c/Users/username
>win "C:\\Users\username\desktop"
C:\\Users\username\desktop
>win "/mnt/c/Users/Cole/desktop"
C:\Users\Cole\desktop
>lin "C:\\Users\username\desktop"
/mnt/c/Users/username/desktop
>foreach ($path in ls)
>{
>lin $path
>}
/mnt/c/Users/username/.aws
/mnt/c/Users/username/.azure
/mnt/c/Users/username/.cache