#bash #windows-subsystem-for-linux
#bash #windows-subsystem-for-linux
Вопрос:
У меня возникли проблемы с написанием программы, которая принимает /path/to/file
в среде WSL Ubuntu и открывает этот файл в программе Windows по умолчанию. Самой большой проблемой здесь является преобразование /path/to/file/for/WSL
в pathtofileforwindows
. Это то, что я написал и поместил в свой .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/^...../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
Я буду 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/^...../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 "$1" | sed 's###')
Комментарии:
1. Удалите пробелы вокруг
=
и инкапсулируйтеecho ... | sed ... | ...
в$()
.2. У меня создалось впечатление, что wslpath использует только пути Windows и преобразует их в путь Ubuntu
Ответ №1:
Гораздо более простым решением является создание файла в /usr / bin/ с именем v (v для просмотра, мне нравятся короткие команды, но вы можете называть это как угодно), содержащего следующее:
cmd.exe /C start $(wslpath -w "$(pwd)/$1")
Теперь, предполагая, что /usr /bin находится в пути wsl, просто вызовите v foo.txt
, чтобы открыть файл в редакторе Windows по умолчанию.
wslpath используется для преобразования пути wsl в путь dos. Теперь это включено в установку wsl (ссылка)
Ответ №2:
После поиска среди различных вопросов, относящихся к смежным проблемам. Я, наконец, нашел решение. В итоге я поместил эту функцию в свой .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/^...../C:/' | sed 's/^mnt//')
cmd_directory=$(echo "$cmd_directory" | sed 's/^..//')
echo "$cmd_directory"
cmd.exe /C start "" "$cmd_directory"
}
Это позволит вам открыть любой файл на вашем компьютере (при условии, что вы знаете путь к нему по WSL) в программе Windows по умолчанию.