Функция для открытия произвольной программы с терминала WSL - PullRequest
0 голосов
/ 14 марта 2019

У меня проблемы с написанием программы, которая берет /path/to/file в среде WSL Ubuntu и открывает этот файл в программе 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

Я открою file.PDF в программе просмотра 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#\##')

1 Ответ

0 голосов
/ 15 марта 2019

После поиска среди различных вопросов, относящихся к смежным вопросам. Я наконец нашел решение. Эту функцию я добавил в свой файл .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"
}

Это позволит вам открыть любой файл на вашем компьютере (при условии, что вы знаете путь к нему WSL) в программе Windows по умолчанию.

...