从WSL终端打开任意程序的功能
Function to Open Arbitrary Program from WSL terminal
我在编写一个在 WSL Ubuntu 环境中获取 /path/to/file
并在其默认 Windows 程序中打开该文件的程序时遇到问题。这里最大的问题是将 /path/to/file/for/WSL
转换为 path\to\file\for\windows
。这是我写并放入我的 .bashrc
文件中的内容:
# Function to get open-wsl to work
function open-from-wsl() {
echo "opening"
cmd_directory = echo "" | sed 's/^\///' | sed 's/\//\/g' | sed 's/^...../[=10=]C:/' | sed 's/^\mnt//'
cmd_directory = echo "$cmd_directory" | sed 's/^..//'
cmd.exe /C start $cmd_directory
}
理想情况下,如果我输入 :
open-from-wsl /mnt/c/Users/DavidG/Google\ Drive/folder/file.PDF
我将在我的默认 PDF 查看器中打开 file.PDF
。然而,截至目前,我收到错误 cmd_directory: command not found
,然后我的命令提示符 window 打开。这当然是为了让我可以从 WSL 打开任何文件并在它的默认程序中打开它,它不仅仅适用于 PDF。
编辑:由于 Socowi 的输入,我已经像这样调整了代码:
# Function to get open-wsl to work
function open-from-wsl() {
echo "opening"
cmd_directory=$(echo "" | sed 's#\##')
cmd_directory=$(echo "$cmd_directory" | sed 's/^\///' | sed 's/\//\/g' | sed 's/^...../[=12=]C:/' | sed 's/^\mnt//')
cmd_directory=$(echo "$cmd_directory" | sed 's/^..//')
cmd.exe /C start $cmd_directory
}
我现在的问题似乎是我无法从 /mnt/c/Users/DavidG/Google\ Drive/folder/file.PDF
中删除 \
,这是我添加行
的目标
cmd_directory=$(echo "" | sed 's#\##')
在搜索了与相邻问题有关的各种问题之后。我终于找到了解决方案。这是我最终放入 .bashrc
文件的函数:
# Function to get open an arbitrary file in its default Windows program
function open-from-wsl() {
echo "opening"
cmd_directory=$(echo "" | sed 's#[\]##')
cmd_directory=$(echo "$cmd_directory" | sed 's/^\///' | sed 's/\//\/g' | sed 's/^...../[=10=]C:/' | sed 's/^\mnt//')
cmd_directory=$(echo "$cmd_directory" | sed 's/^..//')
echo "$cmd_directory"
cmd.exe /C start "" "$cmd_directory"
}
这将允许您在计算机的默认 Windows 程序中打开任何文件(假设您知道它的 WSL 路径)。
一个更简单的解决方案是在 /usr/bin/ 中创建一个名为 v 的文件(v 用于查看,我喜欢简短的命令,但你可以随意命名它)包含以下内容:
cmd.exe /C start $(wslpath -w "$(pwd)/")
现在假设 /usr/bin 在 wsl 路径中,只需调用 v foo.txt
在其默认 windows 编辑器中打开文件。
wslpath is used to convert the wsl path to a dos path. This is now included in the wsl install (link)
我在编写一个在 WSL Ubuntu 环境中获取 /path/to/file
并在其默认 Windows 程序中打开该文件的程序时遇到问题。这里最大的问题是将 /path/to/file/for/WSL
转换为 path\to\file\for\windows
。这是我写并放入我的 .bashrc
文件中的内容:
# Function to get open-wsl to work
function open-from-wsl() {
echo "opening"
cmd_directory = echo "" | sed 's/^\///' | sed 's/\//\/g' | sed 's/^...../[=10=]C:/' | sed 's/^\mnt//'
cmd_directory = echo "$cmd_directory" | sed 's/^..//'
cmd.exe /C start $cmd_directory
}
理想情况下,如果我输入 :
open-from-wsl /mnt/c/Users/DavidG/Google\ Drive/folder/file.PDF
我将在我的默认 PDF 查看器中打开 file.PDF
。然而,截至目前,我收到错误 cmd_directory: command not found
,然后我的命令提示符 window 打开。这当然是为了让我可以从 WSL 打开任何文件并在它的默认程序中打开它,它不仅仅适用于 PDF。
编辑:由于 Socowi 的输入,我已经像这样调整了代码:
# Function to get open-wsl to work
function open-from-wsl() {
echo "opening"
cmd_directory=$(echo "" | sed 's#\##')
cmd_directory=$(echo "$cmd_directory" | sed 's/^\///' | sed 's/\//\/g' | sed 's/^...../[=12=]C:/' | sed 's/^\mnt//')
cmd_directory=$(echo "$cmd_directory" | sed 's/^..//')
cmd.exe /C start $cmd_directory
}
我现在的问题似乎是我无法从 /mnt/c/Users/DavidG/Google\ Drive/folder/file.PDF
中删除 \
,这是我添加行
cmd_directory=$(echo "" | sed 's#\##')
在搜索了与相邻问题有关的各种问题之后。我终于找到了解决方案。这是我最终放入 .bashrc
文件的函数:
# Function to get open an arbitrary file in its default Windows program
function open-from-wsl() {
echo "opening"
cmd_directory=$(echo "" | sed 's#[\]##')
cmd_directory=$(echo "$cmd_directory" | sed 's/^\///' | sed 's/\//\/g' | sed 's/^...../[=10=]C:/' | sed 's/^\mnt//')
cmd_directory=$(echo "$cmd_directory" | sed 's/^..//')
echo "$cmd_directory"
cmd.exe /C start "" "$cmd_directory"
}
这将允许您在计算机的默认 Windows 程序中打开任何文件(假设您知道它的 WSL 路径)。
一个更简单的解决方案是在 /usr/bin/ 中创建一个名为 v 的文件(v 用于查看,我喜欢简短的命令,但你可以随意命名它)包含以下内容:
cmd.exe /C start $(wslpath -w "$(pwd)/")
现在假设 /usr/bin 在 wsl 路径中,只需调用 v foo.txt
在其默认 windows 编辑器中打开文件。
wslpath is used to convert the wsl path to a dos path. This is now included in the wsl install (link)