从WSL终端打开任意程序的功能

时间:2019-03-14 16:56:44

标签: bash windows-subsystem-for-linux

我在编写在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 "$1" | sed 's/^\///' | sed 's/\//\\/g' | sed 's/^...../\0C:/' | 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,然后打开命令提示符窗口。当然,编写此文件是为了使我可以从WSL中打开任何文件,并在其默认程序中将其打开,这不仅与PDF有关。

编辑:由于Socowi的输入,我已经像这样调整了代码:

# Function to get open-wsl to work  
  function open-from-wsl() {  
          echo "opening"
          cmd_directory=$(echo "$1" | sed 's#\##')  
          cmd_directory=$(echo "$cmd_directory" | sed 's/^\///' | sed 's/\//\\/g' | sed 's/^...../\0C:/' | 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 "$1" | sed 's#\##')

2 个答案:

答案 0 :(得分:0)

在与邻道问题有关的各种问题中搜索之后。我终于找到了解决方案。这是我最终放入我的.bashrc文件中的功能:

# Function to get open an arbitrary file in its default Windows program
function open-from-wsl() {
     echo "opening"
     cmd_directory=$(echo "$1" | sed 's#[\]##')
     cmd_directory=$(echo "$cmd_directory" | sed 's/^\///' | sed 's/\//\\/g' | sed 's/^...../\0C:/' | sed 's/^\mnt//')
     cmd_directory=$(echo "$cmd_directory" | sed 's/^..//')
     echo "$cmd_directory"
     cmd.exe /C start ""  "$cmd_directory"
}

这将允许您在默认Windows程序中打开计算机中的任何文件(假设您知道该文件的WSL路径)。

答案 1 :(得分:0)

一个更简单的解决方案是在/ usr / bin /中创建一个名为v的文件(v为视图,我喜欢短命令,但是您可以随意命名),包含以下内容:

cmd.exe /C start $(wslpath -w "$(pwd)/$1")

现在假设/ usr / bin在wsl路径中,只需调用v foo.txt即可在其默认Windows编辑器中打开文件。

wslpath用于将wsl路径转换为dos路径。现在,它已包含在wsl安装(link