एक आवेदन में एक फ़ाइल खोलने के लिए `ओपन` कमांड


13

मैं अपने टर्मिनल में यह कमांड क्यों नहीं चला सकता:

open index.html

क्या यह मेरे ब्राउज़र पर इस फ़ाइल को खोलने वाला नहीं था? इसके अलावा नहीं मैं इस आदेश को चला सकते हैं: open index.html -a "Sublime Text"। इन आदेशों का परिणाम हैं:

$ open index.html
Couldn't get a file descriptor referring to the console

$ open index.html -a "Sublime Text" - 
open: invalid option -- 'a' 
Usage: open [OPTIONS] -- command

2
मैं मानता हूं कि आपको xdg-openअपने ब्राउज़र में फ़ाइल खोलनी चाहिए। openआदेश के लिए एक लिंक है openvtकमान और एक नया आभासी कंसोल में एक द्विआधारी खोलता है। यह स्पष्ट रूप से नहीं है कि आप क्या चाहते हैं।
मार्को

1
मान लें कि आप OSX सिस्टम पर हैं? मुझे नहीं लगता कि openलिनक्स पर कोई कमांड है।
स्लम

1
@ एसएलएम, जैसा कि मार्को बताते हैं, openलिनक्स पर एक कमांड है, जिससे जुड़ा हुआ है openvt; प्रश्न में त्रुटि संदेश उस स्थिति के अनुरूप हैं।
स्टीफन किट

xdg-open filename_or_URL
अहमद खान

1
@EdgarOliveira यदि आप एक प्रोग्राम (एक बाइनरी) खोलना चाहते हैं तो टर्मिनल में अपना नाम टाइप करें। यदि आप किसी संबंधित प्रोग्राम के साथ कोई फ़ाइल खोलना चाहते हैं, तो xdg-open <file>उसे संबंधित प्रोग्राम के साथ फाइल को खोलना चाहिए।
मार्को

जवाबों:


19

ओएस एक्स के openकमांड का प्राथमिक उद्देश्य संबंधित एप्लिकेशन में एक फ़ाइल खोलना है। आधुनिक गैर-OSX यूनियनों पर इसके बराबर है xdg-open

xdg-open index.html

xdg-openopen -aविशिष्ट अनुप्रयोग में फ़ाइल खोलने के लिए OSX के समतुल्य नहीं है । ऐसा इसलिए है क्योंकि किसी एप्लिकेशन में फ़ाइल खोलने का सामान्य तरीका केवल फ़ाइल के नाम के बाद आने वाले एप्लिकेशन का नाम लिखना है। अधिक सटीक रूप से, आपको निष्पादन योग्य प्रोग्राम का नाम टाइप करना होगा जो एप्लिकेशन को लागू करता है।

sublime_text index.html

लिनक्स, अन्य यूनिक्स प्रणालियों की तरह (लेकिन नहीं, जहां तक ​​मुझे पता है, ओएस एक्स के गैर-यूनिक्स भागों) सॉफ्टवेयर को पैकेज मैनेजर के साथ ट्रैक करके प्रबंधित करता है, और व्यक्तिगत फ़ाइलों को रखता है जहां उनका उपयोग किया जाता है । उदाहरण के लिए, सभी निष्पादन योग्य कार्यक्रम निर्देशिकाओं के एक छोटे समूह में होते हैं और उन सभी निर्देशिकाओं को PATHचर में सूचीबद्ध किया जाता है ; में सूचीबद्ध निर्देशिकाओं में sublime_textएक फ़ाइल को चलाने के लिए लगता sublime_textहै PATH। OS X को उन open -aअनुप्रयोगों को संभालने के लिए अप्रत्यक्ष रूप से एक अतिरिक्त स्तर की आवश्यकता होती है , जो एक ही डायरेक्टरी ट्री में अनपैक्ड हैं और एक एप्लिकेशन डेटाबेस में पंजीकृत हैं। लिनक्स में कोई एप्लिकेशन डेटाबेस नहीं है, लेकिन इसे इस तरह से व्यवस्थित किया गया है कि इसकी आवश्यकता नहीं है।

यदि कमांड sublime_textशेल चलाना आपके लिए काम नहीं करता है, तो Sublime Text ठीक से इंस्टॉल नहीं किया गया है। मैंने इसका कभी उपयोग नहीं किया है, और जाहिर तौर पर यह एक टार आर्काइव के रूप में आता है, न कि डिस्ट्रीब्यूशन पैकेज (उदाहरण के लिए डिब या आरपीएम) के रूप में, इसलिए यह संभव है कि आपको एक अतिरिक्त इंस्टालेशन स्टेप करना पड़े। वास्तव में यह स्वचालित बनाने के लिए उदात्त पाठ के निर्माताओं का काम है, लेकिन अगर उन्होंने ऐसा नहीं किया है, तो आप संभवतः इसे कमांड चलाने के लिए खुद कर सकते हैं

sudo -s …/sublime_text /usr/local/bin

उस पथ से बदलें जहां sublime_textनिष्पादन योग्य है, निश्चित रूप से।

openआपके द्वारा सामना की गई कमांड कमांड के लिए एक पुराना नाम है openvt(कुछ लिनक्स वितरण केवल नाम के तहत इसे शामिल करते हैं openvt)। openvtआदेश एक नया बनाता है आभासी कंसोल , जो केवल जड़ द्वारा किया जा सकता है और के बाद से ज्यादातर लोगों को ही कभी एक ग्राफिकल खिड़की वातावरण में काम इस सदी में बहुत बार नहीं किया जाता है।


लेकिन अगर मैं इस कमांड "sublime_text indext.html" को चलाता हूं तो मुझे यह परिणाम मिलता है "sublime_text: कमांड नहीं मिला" मैं उस समस्या को कैसे परिणाम कर सकता हूं?
एडगर ओलिवेरा

@EdgarOliveira मुझे लगता है कि मुझे समस्या दिखाई देती है, जाहिर है कि उदात्त पाठ उचित पैकेज के साथ नहीं आता है? मेरा संपादन देखें।
गिल्स एसओ- बुराई को रोकना '

मैंने इसके लिए एक उपनाम बनाया: उपनाम उपनाम: = '/ opt / sublime_text / sublime_text / home / user / Documents / sandbox / webdeveloper' लेकिन जब मैंने "sublimateext" निष्पादित किया तो केवल एक के बजाय दो विंडो खोलीं! क्यों? साभार
एडगर ओलिवेरा

जब मैंने फ़ाइल को बदल दिया है .bashrc मुझे संदेह है "फ़ाइल को रीसेट कैसे करें। bashrc एक नया उपनाम निष्पादित कर सकता है, उसी टर्मिनल पर जहां मैंने परिवर्तन किया था?" Google ने इसे और उत्तर पाया, यूनिक्स और लिनक्स में, और केवल आपके पास कमांड "बैश" है और आप अपना नया उपनाम चलाएंगे :)
एडगर ओलिवेरा

7

आप उस ऑपरेटिंग सिस्टम का उल्लेख नहीं करते हैं जिसका आप उपयोग कर रहे हैं।

कुछ लिनक्स वितरण पर openकमांड कमांड का एक प्रतीकात्मक लिंक है openvtजो एक नए वर्चुअल कंसोल में एक बाइनरी खोलता है। यह स्पष्ट रूप से नहीं है कि आप क्या चाहते हैं। आपके त्रुटि संदेश वास्तव में इंगित करते हैं कि आपने openvtकमांड को आमंत्रित किया है । यह कमांड तर्क के रूप में एक प्रोग्राम बाइनरी (एक निष्पादन योग्य) की उम्मीद करता है।

मुझे लगता है कि आप मतलब है xdg-open, जो इसके विपरीत openvt, एक निष्पादन योग्य तर्क के रूप में उम्मीद नहीं करता है, लेकिन एक फ़ाइल जो एक प्रोग्राम से जुड़ी है और प्रोग्राम के साथ फाइल को खोलता है। आप तर्क के रूप में फाइल और URL पास कर सकते हैं।

इसलिए xdg-open index.htmlअपने ब्राउज़र xdg-open image.pngमें फाइल को खोलना चाहिए , अपने इमेज व्यूअर आदि में फाइल को खोलना चाहिए।


1
एकमात्र समस्या xdg-open है जो फ़ाइल को फ़ाइल नाम के लिए डिफ़ॉल्ट अनुप्रयोग में खोलेगी। आप xdg-open के साथ एप्लिकेशन का चयन नहीं कर सकते। मुझे नहीं पता कि ऐप चुनने के लिए कोई कमांड है या नहीं, लेकिन अगर आप ऐप जानते हैं (उदाहरण के लिए "उदात्त पाठ") तो सीधे प्रोग्राम को लागू करना बेहतर होगा।
X3MBoy

1
@ X3MBoy xdg-openकॉल के पीछे का विचार उस फ़ाइल के लिए डिफ़ॉल्ट एप्लिकेशन को लागू करना है । यदि आप एक अलग प्रोग्राम का उपयोग करना चाहते हैं, तो बस कॉल करें <program> <file>। मैं समस्या को देखने में विफल हूं।
मार्को

वह कुछ कमांड करने के लिए open index.html -a "Sublime Text" -कहता है: यही कारण है कि मैं "समस्या" कहता हूं, क्योंकि अगर आप xdg-openएक html फ़ाइल खोलने के लिए उपयोग करते हैं, तो ऐसी संभावनाएं हैं कि वें फ़ाइल ब्राउज़र द्वारा "
सबलाइम

3

हालाँकि लोग अक्सर xdg-openइसकी कार्यक्षमता का नाम देते हैं open, macOS openथोड़ा अलग है क्योंकि यह 1. stdout / stedrr से कुछ भी रीडायरेक्ट नहीं करता है और 2. टर्मिनल से जो भी आप चलाना चाहते हैं उसे अलग कर लेता है (जो लगभग हमेशा GUI लॉन्च करते समय आप जो चाहते हैं। ऐप्स ताकि आपके पास चारों ओर टर्मिनल न हों)

इसे हल करने के लिए, मैं कुछ मानक GNU टूल्स (सिंटैक्स फिश शेल का उपयोग करके एक उचित समकक्ष के साथ आया हूं, लेकिन बैश में रूपांतरण तुच्छ है):

function open
    for i in $argv
        setsid nohup xdg-open $i > /dev/null 2> /dev/null
    end
end

जोड़ा गया :

बैश शेल का उपयोग करने वालों के लिए, यहां फ़ंक्शन है:

open ()
{
    for i in $*
    do
        setsid nohup xdg-open $i > /dev/null 2> /dev/null
    done
}

2

मेरा समाधान (दैनिक आधार पर उपयोग किया जाता है) के लिए उपयोग करना aliasहै xdg-open

बस इसे अपने पर रखो ~/.bashrc:

alias open='xdg-open '

फिर अपने शेल को बंद करें और पुनः आरंभ करें या source ~/.bashrc

अब आप उस कमांड से कोई भी फाइल खोल सकते हैं… .png से .jpg से .docx से .pdf से .txt तक।

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