मैं कैसे डिफ़ॉल्ट एप्लिकेशन के साथ WSL से एक फ़ाइल "खोल" सकता हूं?


13

अधिकांश सिस्टम एक प्रदान openआदेश (बारी-बारी से के रूप में जाना start, cygstart, xdg-openआदि) जो डेस्कटॉप वातावरण के "डिफ़ॉल्ट" आवेदन, जो कुछ भी है कि एक फ़ाइल को खोलता है।

उदाहरण के लिए, Powershell से जब मैं प्रवेश करता हूं:

PS> start form.pdf

दस्तावेज़ एज में खुलता है।

क्या बैश-ऑन-उबंटू-ऑन-विंडोज ऐसा कर सकता है?

जवाबों:


30

चूंकि विंडोज लिनक्स इंटरॉप ने काम करना शुरू कर दिया है, अब आप कॉल कर सकते हैं:

cmd.exe /C start <file>

मेरे लिए सापेक्ष रास्तों के लिए काम करता है, निरपेक्ष पथों के लिए मैंने सी द्वारा स्थानापन्न / mnt / c के लिए एक स्क्रिप्ट लिखी: ... | sed 's/\/mnt\/\(.\)/\1:/1' | xargs cmd.exe /C start
माइकल

1
अच्छा समाधान। हम सुपरयूज़र . com/q/1110974/66714 से जानकारी का उपयोग करके लिनक्स फाइल सिस्टम पर फ़ाइलों का उपयोग भी कर सकते हैं । कुछ इस तरह कि cmd.exe /c start "%localappdata%/lxss/$(readlink -f $some_relative_path)"अब हम आग से खाना बना रहे हैं!
Cheezmeister

3

जैसा कि मार्टिज़न ने उल्लेख किया है कि यह विंडोज एप्लिकेशन / फ़ाइल को निष्पादित / खोलने का सही तरीका है।

cmd.exe /C start <file>

मुझे इसे बैश स्क्रिप्ट में काम करने के लिए बहुत उपयोगी लगा जो मैं अपने सिस्टम पथ में एक फ़ोल्डर में रखता हूं। मैं इसे नाम देता हूं startऔर chmod 0744इसे निष्पादन योग्य बनाने के लिए फ़ाइल पर करता हूं । इसका $*मतलब यह है कि आप स्क्रिप्ट को प्रदान की गई कमांड लाइन के सभी तर्क पास कर देंगे cmd.exe

#!/bin/bash
cmd.exe /c start "Launching from BASH" "$*"

अपने सिस्टम पथ में इस कमांड के साथ मैं लिनक्स में इस तरह से कमांड कर सकता हूं जो विंडोज में खुलता है:

  1. start FileXYZ.pdf // Windows में डिफ़ॉल्ट असाइन किए गए पीडीएफ दर्शक में पीडीएफ खोलता है
  2. start explorer . // Windows Explorer में वर्तमान WSL फ़ोल्डर खोलता है
  3. start MyApp.exe // विंडोज एप्लिकेशन को लॉन्च करता है

1
एकमात्र समस्या यह है कि यह समाधान उन फ़ाइलों के साथ काम नहीं करता है जिनके नाम में व्हाट्सएप है।
0x7d7b

@ h3nrik ग्रेट पॉइंट। मुझे लगता है कि मैं लिनक्स में रिक्त स्थान के साथ बहुत सारी फाइलें नहीं खोलता हूं। मैंने इसे संभालने के लिए स्क्रिप्ट को अपडेट किया।
छद्मवसंत

व्हाट्सएप के साथ लिनक्स फाइलनाम पर आमतौर पर बैकस्लैश जैसे काम होते हैं a\ whitespace.pdf। अपनी स्क्रिप्ट शुरू start.sh a\ a.pdf b\ b.pdfकरने से काम नहीं चलेगा।
0x7d7b

explorer.exe .विंडोज एक्सप्लोरर में वर्तमान पथ खोलता है
जॉनी

2

यह इस बात पर निर्भर करता है कि क्या आप ए) को WSL या B के अंदर एक लिनक्स प्रोग्राम लॉन्च करना चाहते हैं) आप एक बील शेल प्रॉम्प्ट से विंडोज प्रोग्राम लॉन्च करना चाहते हैं।

अगर B) हां तो अगर आप cygwin / bash इंस्टॉल करते हैं। उदाहरण के लिए विंडोज़ के लिए गिट स्थापित करें और आपके पास बैश वाली खिड़कियों के नीचे चलने वाला सिस्टम है। तब आप बस शुरू कर सकते हैं, वास्तव में यह एक स्क्रिप्ट के रूप में शामिल है:

$ cat /usr/bin/start
#!/usr/bin/env bash
# Copyright (C) 2014, Alexey Pavlov
#   mailto:alexpux@gmail.com
# This file is part of Minimal SYStem version 2.
#   https://sourceforge.net/p/msys2/wiki/MSYS2%20installation/
# File: start

cmd //c start "${@//&/^&}"

यदि A) तो यह और अधिक कठिन हो जाता है विशेष रूप से यदि आप GUI विंडो में .pdf प्रदर्शित करने के लिए एक लिनक्स प्रोग्राम लॉन्च करना चाहते हैं। ध्यान दें कि विंडोज़ एक पीडीएफ फाइल को खोलने के लिए एक डिफ़ॉल्ट एप्लिकेशन को संबद्ध करना जानता है लेकिन WSL के पास जानकारी नहीं है। यहां तक ​​कि अगर आपको WSL के तहत एक डेस्कटॉप चल रहा है , तो आपको पीडीएफ खोलने के लिए एक linux GUI ऐप को जोड़ना होगा।

स्पष्ट करने के लिए ध्यान दें, WSL के भीतर आप linux execables को क्रियान्वित करते हैं न कि windows निष्पादन योग्य:

(WSL):~# file /bin/gzip
/bin/gzip: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=68cc3c090405cf6d40e97d2ff58085fd26940602, stripped

(WSL):~# file /mnt/c/Program\ Files/Internet\ Explorer/iexplore.exe
 /mnt/c/Program Files/Internet Explorer/iexplore.exe: PE32+ executable (GUI) x86-64, for MS Windows

(WSL):~# /mnt/c/Program\ Files/Internet\ Explorer/iexplore.exe
 bash: /mnt/c/Program Files/Internet Explorer/iexplore.exe: cannot execute binary file: Exec format error

1

eopen WSL के भीतर विभिन्न फ़ाइलें (, निर्देशिका और URI) खोल सकते हैं।

https://github.com/ko1nksm/eopen-ecd

उदाहरण

# Open directory with (latest used) Explorer
eopen ~/.config/

# Open directory with new instance of Explorer
eopen -n ~/.config/

# Opens with Windows default application
eopen image.png

# Opens with Windows text editor
eopen -e ~/.bashrc

# Use sudo to edit the unowned file
eopen -e --sudo /etc/hosts

# Opens with Windows default browser
eopen http://google.com

# Open files and directories under Windows
eopen C:/Windows

# Open files and directories under Network shared folder
eopen //server/shared

# Others
eopen mailto:user@example.com   # Mail protocol
eopen calculator:               # Application
eopen shell:Personal            # Shell commands
eopen :MyComputerFolder         # Shorthand for shell:
eopen shell:::{2559a1f8-21d7-11d4-bdaf-00c04f60b9f0} # CLSID
eopen :                         # Current Explorer location
eopen :/workspace               # Relative path from current Explorer location


1

आप Start-ProcessWSL में से पॉवरशेल कमांड को कॉल कर सकते हैं :

powershell.exe -Command Start-Process file

इसे भी निरपेक्ष पथों के साथ काम करने के लिए, आप wslpath -waविंडो-पथ पर पथ का अनुवाद करने के लिए कमांड का उपयोग कर सकते हैं ।

powershell.exe -Command Start-Process `wslpath -wa /absolute/path/to/file`

इस cmd.exeसमाधान पर एक फायदा है : माउंटेड नेटवर्क शेयरों के लिए, wslpathएक यूएनसी मार्ग की तरह पैदा करता है \\server\share\। इन UNC रास्तों को नियंत्रित नहीं किया जा सकता है cmd.exe


1

मैंने पाया है कि explorer.exe सही हल किए गए पथ (यहां तक ​​कि माउंटेड नेटवर्क निर्देशिकाओं) को खोजने और डिफ़ॉल्ट टूल लॉन्च करने में बहुत अच्छी तरह से काम करता है। एक गेटा यह है कि आपके पास फ़ाइलनाम में पथ नहीं हो सकते हैं, इसलिए आपको एक्सप्लोरर को सही ढंग से लॉन्च करने के लिए थोड़ा सहायक फ़ंक्शन / स्क्रिप्ट बनाने की आवश्यकता है, जैसे:

win() { 
    # get full unsymlinked filename 
    file=`readlink -e $1` 
    dir=$(dirname "$file") 
    base=$(basename "$file") 
    # open item using default windows application 
    (cd "$dir"; explorer.exe "$base")
}

अद्यतन: एनजीओ ने एक और स्क्रिप्ट को इंगित किया wslpath, जो कि पथ रूपांतरण करता है, इसलिए आप पथ पर सीधे एक्सप्लोरर को कॉल कर सकते हैं (परिवर्तित करने के बाद)। फिर उपरोक्त फ़ंक्शन तुच्छ हो जाता है और आसानी से एक उपनाम बनाया जा सकता है।


उत्कृष्ट समाधान!
१०:४६ पर स्टैब्लॉग

1

मार्टिज़न के जवाब पर विस्तार करने के लिए, आप डाल सकते हैं

alias start='cmd.exe /C start'

अपने .bashrc में अपेक्षित विंडोज़ व्यवहार प्राप्त करने के लिए, उदाहरण के लिए start .वर्तमान dir में एक्सप्लोरर खोलता है।


0

प्रयोग करके देखें wsl-open। यह उनके मानक-विंडोज़-एप्लिकेशन के साथ फाइलें खोलता है और यहां डाउनलोड किया जा सकता है: https://github.com/4U6U57/wsl-open

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.