एक नई प्रक्रिया के साथ url खोलने के लिए xdg- ओपन का उपयोग करें


13

मैं क्रंचबैंग (जो डेबियन पर आधारित है, और टर्मिनेटर का उपयोग करता है ) के साथ एक वेब डेवलपमेंट वातावरण के रूप में प्रयोग करना शुरू कर रहा हूं , और जिन चीजों से मैं संघर्ष कर रहा हूं उनमें से एक है व्यवहार xdg-open। मैं एक OSX बैकग्राउंड से आता हूं, इसलिए अगर यह सवाल सघन हो जाए तो मुझे माफ कर देना।

मैं एक यूआरएल को खोलने में सक्षम होना चाहूंगा xdg-open http://www.google.comऔर फिर काम करने के लिए उसी टर्मिनल विंडो का उपयोग करना जारी रखूंगा (यह openOSX में कैसे कार्य करता है)। अभी, xdg-openमैं ब्राउज़र टैब को बंद करने तक वर्तमान टैब / सत्र का उपयोग करता हूं, या मैन्युअल रूप से चीजों को समाप्त करता हूं ctrl + c। मैं बहुत पसंद करूंगा कि यह एक नई प्रक्रिया शुरू करे, इस तरह मैं एक URL खोल सकता हूं, पृष्ठ पर डेटा का संदर्भ ले सकता हूं, और एक अतिरिक्त टैब खोलने की आवश्यकता के बिना उसी टैब / विंडो में उपयोग कर सकता हूं।


आप किस वेब ब्राउज़र का उपयोग कर रहे हैं?
क्रिस्चियन सियुपिटु

जवाबों:


12

अजीब बात है, यह मेरे डेबियन पर बॉक्स से बाहर की तरह काम करता है। इसे पृष्ठभूमि में चलाने का प्रयास करें:

xdg-open http://www.google.com &

आप इन पंक्तियों को अपनी ~/.bashrcफ़ाइल में जोड़कर एक फ़ंक्शन में बना सकते हैं :

function open () {
    xdg-open "$*" &
}

आप तब बस चला सकते हैं open http://www.google.comऔर यह पृष्ठभूमि में चलेगा।


1
यह बहुत अच्छा काम करता है। मैं करने के लिए एक साधारण उपनाम के लिए उम्मीद कर रहा था open, (यानी खुला = 'xdg-open') वहाँ xdg-open <url> &एक शेल फ़ंक्शन का उपयोग किए बिना कार्यक्षमता प्राप्त करने का एक तरीका है ?
निक टोमलिन

@NickTomlin जहाँ तक मुझे पता है, नहीं, लेकिन आपको कार्यों के खिलाफ क्या मिला है? जैसा कि आप मेरे अद्यतन उत्तर में देख सकते हैं यह लगभग एक उपनाम के रूप में सरल है।
terdon

कोई विशेष पूर्वाग्रह नहीं, मैं एक फ़ंक्शन से बचने की उम्मीद कर रहा था क्योंकि मैं मैक ओएस और * निक्स फ्लेवर दोनों के लिए एक ही उपनाम का उपयोग करने (और पुन: उपयोग) करने की कोशिश कर रहा हूं।
निक टोमलिन

कोई कारण नहीं कि तुम क्यों नहीं कर सकते। कार्य शेल पर निर्भर करते हैं, जब तक आप प्रश्न में सभी प्रणालियों में बैश का उपयोग करते हैं, तब तक इसे पूरी तरह से काम करना चाहिए।
terdon

यह फेडोरा 20 पर भी काम करता है।
क्रिस्टियन सियुपिटु

7

यदि आप इस प्रक्रिया को वर्तमान शेल से अलग करना चाहते हैं, तो इसे बैकग्राउंड जॉब के रूप में शुरू करने की बजाय xdg-open http://www.google.com &, मुझे इसकी detachउपयोगिता पसंद है :

detach xdg-open http://www.google.com

कोई इसके लिए एक उपनाम बना सकता है। मुझे पसंद detachसे अधिक nohupबंद stdin stdout और डिफ़ॉल्ट रूप से stderr के रूप में इसलिए इसकी मंगलाचरण क्लीनर है।


3
काश, detachमेरा डिस्ट्रो में अस्तित्व ही नहीं लगता। nohupप्रक्रिया को लॉन्च करता है, लेकिन फिर भी टर्मिनल विंडो पर कब्जा कर लेता है।
निक टोमलिन

detachमेरे डिस्ट्रो में भी नहीं है; लेकिन अजगर URL खोलने और कोचिंग को संभाल सकता है python -m webbrowser -t "http://example.com":। यह लगभग सभी-हाल ही में डिस्क्स के लिनक्स पर बॉक्स से बाहर काम करना चाहिए।
क्रुल

हालांकि detachAUR में भी नहीं है, यह स्रोत से स्थापित करना आसान साबित हुआ और इसके अलावा एकमात्र ऐसा कार्यक्रम था जो मुझे चाहिए था। (यहां सूचीबद्ध विकल्प और detachवेबसाइट पर शेल को तब तक बंद करने की अनुमति न दें जब तक xdg-openचल रहा है, या कम से कम detachमेरे शेल को एक शिकायत नहीं करता है)
rien333

4

xdg-openकार्यक्रम समाप्त होने की प्रतीक्षा करता है। यह डिजाइन द्वारा है। यदि प्रोग्राम एक टेक्स्ट मोड प्रोग्राम है, तो उसे टर्मिनल में अग्रभूमि में रहना होगा। भले ही प्रोग्राम एक GUI है, यह व्यवहार उस स्थिति में उपयोगी xdg-openहोता है, जब स्क्रिप्ट से उपयोग किया जाता है और फ़ाइल संपादित होने के बाद स्क्रिप्ट कुछ प्रदर्शन करना चाहती है (जैसे कि नया संस्करण कहीं भेजें या अन्यथा नए संस्करण के साथ कुछ बनाएं)।

यदि आप प्रतीक्षा नहीं करना चाहते हैं, xdg-openतो पृष्ठभूमि में चलें । आप अंत में एम्परसेंड लगाकर पृष्ठभूमि में कोई भी शेल कमांड चला सकते हैं।

xdg-open http://www.google.com &

कुछ कार्यक्रमों के साथ, xdg-openतुरंत लौटता है। वास्तव में ऐसा क्या होता है कि जो प्रोग्राम xdg-openरिटर्न करता है, वह तुरंत लौट आता है। यह आमतौर पर GUI प्रोग्राम्स के साथ होता है जो सभी फाइलों को एक ही उदाहरण में खोलते हैं: जब आप उन्हें दूसरी बार शुरू करते हैं, तो वे संदेश को चलाने के लिए एक संदेश भेजते हैं ताकि यह कहा जा सके कि फ़ाइल को खोलें, और तुरंत बाहर निकलें।


ऐसे आवेदन एकल उदाहरण नीति को कैसे लागू करते हैं? DBus एक तरह से मुझे पता है, लेकिन क्या इसे लागू करने का 'xdg' तरीका है?
PnotNP

@NulledPointer लॉक फाइलें, X11 विंडो संदेश, डी-बस, ... मुझे लगता है कि डी-बस "मानक" Freedesktop तरीका है, लेकिन मुझे नहीं पता कि इसके लिए कोई औपचारिक विनिर्देश है।
गिल्स एसओ- बुराई को रोकना '

2
मेरे Ubuntu 16.04 सिस्टम पर, xdg-open हमेशा तुरंत लौटता है। मेरे वर्तमान आवेदन के लिए, मैं वास्तव में पसंद करूंगा कि यह ब्लॉक हो जाए। आपका "xdg- ओपन कार्यक्रम के समाप्त होने की प्रतीक्षा करता है। यह डिज़ाइन द्वारा है।" जानकारी कहां से आई?
चारल बोथ

@CharlBotha xdg-openतुरंत लौटता है (मैं इस बात की पुष्टि कर सकता हूं कि उबंटू 16.04 पर), लेकिन यह जो कार्यक्रम है, वह पृष्ठभूमि में जा सकता है। उदाहरण के लिए, मेरे सिस्टम पर, xdg-openपीडीएफ फाइलों के लिए एवियन को आमंत्रित करता है; evince foo.pdfजब तक आप पीडीएफ फ़ाइल को बंद नहीं करते हैं , तब तक ब्लॉक करता है, जब तक कि पीडीएफ पहले से ही खुला न हो, उस स्थिति में दूसरी evinceप्रक्रिया xdg-openजो मौजूदा उदाहरण से शुरू होती है और बाहर निकल जाती है। xdg-openउस पर कोई नियंत्रण नहीं है, जब तक कि कार्यक्रम को चालू रखने का कोई तरीका नहीं है।
गिल्स एसओ- बुराई को रोकना '

@ मुझे लगता है कि आपने चारल बोथरा को गलत समझा। आपका उत्तर बताता है "xdg-open प्रोग्राम के समाप्त होने की प्रतीक्षा कर रहा है। यह डिज़ाइन द्वारा है।" लेकिन फिर आपकी टिप्पणी "xdg- ओपन रिटर्न तुरंत" कहती है ... जो विरोधाभासी हैं।
चेशिरेकोव

1

टेर्डन के उत्तर और डैन डी। की चर्चा केnohup संयोजन से मैंने एक ऐसा कार्य किया जो वास्तव में मैं चाहता हूँ:

  1. फ़ाइल को चुने हुए ऐप में टर्मिनल पर किसी भी लेखन के बिना खोलता है ।
  2. प्रक्रिया का पता लगाता है ताकि टर्मिनल विंडो बंद हो सके।
  3. कोई भी त्रुटि नहीं लिखता है जो ऐप टर्मिनल को उत्पन्न करता है।

मैंने इसे अपनी .bashrc/.zshrcफ़ाइल में जोड़ा :

function open () {
  nohup xdg-open "$*" > /dev/null 2>&1
}

छिपाने के बारे में इस चर्चा को /dev/null 2>&1देखने के लिए औरstdoutstderr


0

इसे इस्तेमाल करे:

DISPLAY=:0.0; xdg-open '<url>'

मैं इस तकनीक का उपयोग चुंबक को अपने बिट टोरेंट क्लाइंट वुज़ में एन-कतार में करने के लिए करता हूं।

ssh someserver "DISPLAY=:0.0; xdg-open 'http://www.google.com/'"

एकल उद्धरण URL की सामग्री को सुरक्षित रखने में मदद करते हैं ताकि शेल उन्हें व्याख्या करने का प्रयास न करे।


यह अभी भी वर्तमान टर्मिनल विंडो में चलने वाली प्रक्रिया को बनाए रखता है। अगर मुझे अपना प्रश्न स्पष्ट करना है तो मुझे बताएं।
निक टॉमलिन

हाँ, यदि आप चाहते हैं कि यह तुरंत पृष्ठभूमि में आ जाए तो इसे पृष्ठभूमि पर एक एम्परसेंड "&" के साथ रखें। क्या @ टेर्डन का जवाब ऐसा नहीं है?
SLM

यहाँ मुद्दा xdg-open नहीं है, @Gilles उत्तर देखें, वह बताता है कि xdg-open क्यों आयोजित किया जा रहा है, यह GUI है जिसे आप URL भेज रहे हैं जिससे xdg-open प्रतीक्षा कर रहा है।
SLM

आप किस ब्राउज़र से URL भेज रहे हैं? जब आप URL w / भेजते हैं तो क्या कोई संवाद बॉक्स या कुछ और पॉप होता है xdg-open? यहाँ कई उत्तरदाताओं की तरह लगता है कि सामान्य व्यवहार यह दर्शाता है कि कुछ समय के बाद टर्मिनल पर नियंत्रण वापस आ जाता है।
SLM

स्पष्टीकरण के लिए धन्यवाद। मैंने उत्तरों की समीक्षा की है और मैं इसे अब बेहतर समझता हूं। ब्राउज़र iceweasal है।
निक टोमलिन

0

यदि आपको कमांड लाइन (लूप) से वेब पेज खोलने की आवश्यकता है, तो आप स्क्रिप्ट शुरू करने से पहले केवल ब्राउज़र खोल सकते हैं।

इस मामले में यह ब्राउज़र को पहले लिंक के बाद बंद होने का इंतजार नहीं करता है, लेकिन उन सभी को नए टैब में खोलता है।


0

आज तक, उन विकल्पों में से किसी ने भी मेरे लिए काम नहीं किया। मुझे पूरी जानकारी है कि ओपी ने कहा "xdg-open का उपयोग करें", अग्रिम में क्षमा करें।

मैं एक मृत-सरल कर रहा हूं chrome https://google.es --new-window || chromium https://google.es --new-window || firefox https://google.es

यदि आपके पास उन 3 ब्राउज़रों में से कोई भी नहीं है, तो बस अपने ऑर्डर की वरीयता के साथ सही उपयोग करने के लिए स्वतंत्र महसूस करें।

नोट: फ़ायरफ़ॉक्स ने बिना कुछ जोड़े नई विंडो खोली। मामला आपके लिए निर्बाध रूप से काम नहीं करता है, उपयोग करें firefox https://google.es -new-instance -new-window। ध्यान दें कि -फ़ायरफ़ॉक्स झंडे के लिए सिर्फ एक है ।


0

disown इसके लिए सही कमांड है।

मैं इसके लिए 2 फ़ंक्शन का उपयोग करता हूं, ताकि इसे अधिक पठनीय रखा जा सके।

f_x()
{
   xdg-open "$1" &
   disown
}

x()
{
   f_x "$*" > /dev/null 2>&1
}

क्या, आप मानते हैं कि एक फ़ंक्शन जो किसी अन्य फ़ंक्शन को कॉल करता है, वह एक फ़ंक्शन की तुलना में पढ़ना और समझना आसान है जो तीन पंक्तियों में लंबा है?
जी-मैन का कहना है कि 'मोनिका'

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