मैं कैसे एक bash स्क्रिप्ट के अंदर से एक फ़ाइल खोल सकता हूँ?


22

ठीक है, इसलिए अच्छा चल रहा है gedit myfile.txt। लेकिन एक बैश स्क्रिप्ट के अंदर से फ़ाइल को खोलने के बारे में क्या है, जो कि डिफ़ॉल्ट रूप से जुड़े फ़ाइल डेस्कटॉप ऐप का उपयोग कर रहा है?

मैंने नीचे की कोशिश की है, जो टर्मिनल में मैन्युअल रूप से चलने पर बहुत अच्छा काम करता है, लेकिन जब मैंने इसे bash फ़ाइल में रखा, तो कुछ नहीं होता है:

#!/bin/bash
xdg-open "myfile.txt"&

इसके बजाय मुझे क्या करना चाहिए?

कृपया ध्यान दें कि टर्मिनल बंद होने के बाद मुझे फ़ाइल को खुला रहने की आवश्यकता है।


1
फ़ाइल का पथ प्रदान करने का प्रयास करें .. और क्या आपको यकीन है कि यह उद्धरण के साथ होना चाहिए? उद्धरणों के बिना कोशिश करें
अभिषेक

7
क्या आप सुनिश्चित हैं कि कमांड कुछ नहीं करता है? मैंने अभी आपके द्वारा सूचीबद्ध सामग्री के साथ एक स्क्रिप्ट बनाई है, और यह geditसूचीबद्ध फ़ाइल के साथ खुलती है (या किसी मौजूदा सत्र में एक नया टैब खोलता है)। यह कार्यक्रम से बाहर निकलने तक अवरुद्ध होने के बजाय, हालांकि तुरंत लौटता है।
जेम्स हेनस्ट्रिज

3
इसके अलावा, टर्मिनल से अपनी स्क्रिप्ट चलाते समय आपको क्या त्रुटियाँ मिलती हैं?
१६:१२

हां। मैं अपनी स्क्रिप्ट में फ़ाइल के लिए पूर्ण पथ का उपयोग करता हूं, लेकिन इसे स्पष्ट करने के लिए यहां हटा दिया गया है। उद्धरण के साथ या बिना कोई अंतर नहीं। मैंने कोशिश की xtg-openहै *.txt, *.htmlऔर अधिक - बस अभ्यस्त काम।
औद्योगिक

5
@ अभिषेक: ऐसे मामले नहीं हैं जहां ऐसी स्थितियों में उद्धरण हानिकारक हैं, और बहुत सारे मामले जहां उद्धरण को छोड़ना समस्या पैदा कर सकता है। जब तक आपके पास कोई विशिष्ट कारण न हो, तब तक अनावश्यक होने पर भी, सभी तारों को उद्धृत करने की आदत बनाने के लिए यह एक अच्छा अभ्यास है।
स्कॉट सेवेरेंस

जवाबों:


16

मुझे लगता है कि आपकी स्क्रिप्ट को काम करना चाहिए। लेकिन आप इसे थोड़ा और जानकारी प्राप्त करने के लिए इसमें जोड़ सकते हैं:

#!/bin/bash
T=`xdg-mime query filetype $1`
echo "opening file "  $1  " of type " $T "with " `xdg-mime query default $T`
xdg-open $1
echo "finished script"

जब इस लिपि को (टर्मिनल में my_open.sh नाम दिया जाता है):

my_open.sh path/to/somefile.txt

मुझे निम्न आउटपुट मिले:

opening file  path/to/somefile.txt  of type  text/plain with  gedit.desktop
finished script

जो मुझे बताता है कि फ़ाइल के लिए रास्ता ठीक है, mimetype पहचाना गया है और फ़ाइल खोलने के लिए उपयोग किया जाने वाला Desktopfile ठीक है। और gedit विचाराधीन फ़ाइल के साथ खुलता है।

अब जब किसी अन्य फ़ाइल पर चलाया जाता है:

my_open.sh path/to/README

मुझे निम्न आउटपुट मिले:

opening file  path/to/README  of type  text/x-readme with
finished script

विभिन्न mimetype और लापता डेस्कटॉप फ़ाइल पर ध्यान दें। फिर भी, xdg-open सभी पाठ फ़ाइलों (gedit) के लिए डिफ़ॉल्ट खोलता है।

इसलिए, आप अपनी स्क्रिप्ट में ऐसा कुछ जोड़ना चाहते हैं और देखें कि क्या आपको अप्रत्याशित आउटपुट मिलता है (जिसे आप फिर अपने प्रश्न में जोड़ सकते हैं ...)।


ठीक है, finished scriptअंत में शोर को छोड़कर । मैं सलाह देता हूं [ catb.org/~esr/writings/taoup/html/kes(The Unix प्रोग्रामिंग की कला), मौन का नियम। Btw .: बैकटिक्स को हटा दिया जाता है - इसके बजाय $ (...) को प्राथमिकता दें, जो कि संभव नहीं है।
उपयोगकर्ता अज्ञात

2
ठीक है, स्क्रिप्ट अतिरिक्त जानकारी देने के लिए है। 'समाप्त स्क्रिप्ट' द्वारा दी गई जानकारी यह है कि आपको इसकी आवश्यकता नहीं है nohupया नहीं &, लेकिन यह xdg-openरिटर्न और आपको जारी रखने देता है।
xubuntix

यही प्रॉम्प्ट के लिए है।
यूजर अनजान

3
सच। बस सोचा कि यह उस तरह से अधिक स्पष्ट होगा। वास्तव में, पूरी स्क्रिप्ट की आवश्यकता नहीं है, क्योंकि यह xdg-openपहले से ही अधिक नहीं है, इसलिए यह वैसे भी उत्पादन गुणवत्ता स्क्रिप्ट नहीं है ...
xubuntix

5

एक बैश स्क्रिप्ट का परीक्षण करें।

#!/bin/bash
gedit myfile.txt

फिर, स्क्रिप्ट को निष्पादन योग्य बनाएं:

chmod +x test.sh

अंत में, स्क्रिप्ट को इस रूप में चलाएं:

./test.sh

आपके उत्तर के लिए धन्यवाद, लेकिन दुर्भाग्य से मुझे ऊपर बताए अनुसार फ़ाइल के लिए गनोम के डिफ़ॉल्ट फ़ाइल संपादक को खोलने की आवश्यकता है।
औद्योगिक

3

शायद xdg- खुले के बजाय सूक्ति -खुले


मैंने पाया कि इस समाधान ने सबसे अच्छा काम किया
जॉन

यदि उपयोगकर्ता Gnome पर नहीं है तो क्या होगा?
गोडार्ड

2

आप सही दिशा में जा रहे हैं। यदि आप चाहते हैं कि जब आप टर्मिनल विंडो बंद कर दें तो gui ऐप खुला रहे तो आपको बस nohupलाइन के शुरू में जोड़ना होगा ।

#!/bin/bash
nohup xdg-open "myfile.txt"&

अगर गुई ऐप शायद इसे नहीं खोल रहा है क्योंकि आपके पास DISPLAYशेल में पर्यावरण चर सेट नहीं है जिसे आप इसे लॉन्च करने का प्रयास कर रहे हैं। एक प्रतिध्वनि करने की कोशिश करें$DISPLAY


3
xdg-open को न तो आवश्यकता है nohupऔर न ही&
xubuntix

0

आपके प्रश्न का पहला भाग

कमांड के साथ catआप टर्मिनल के अंदर एक फ़ाइल खोल सकते हैं, यदि ऐसा है जो आप चाहते हैं (यह आपके प्रश्न के पहले भाग में बताया गया है)।

इसका उपयोग करने के लिए आप बस टाइप कर सकते हैं cat FILENAME

अन्य सूचना

यदि आपको अधिक कमांड की आवश्यकता है: तो यहां कमांड्स की एक अच्छी सूची है।

गनोम डिफ़ॉल्ट संपादक

यदि आप GNOME के ​​डिफॉल्ट एप्लिकेशन में फाइल को खोलना चाहते हैं gedit

इसका उपयोग करने के लिए, बस टाइप करें gedit FILENAME


यह टर्मिनल में फ़ाइल खोलता है, लेकिन GNOME का डिफ़ॉल्ट संपादक नहीं है
औद्योगिक

@ औद्योगिक ने मेरा उत्तर संपादित किया।
अलवर

दुर्भाग्य से, खुले अभ्यस्त काम या तो ...
औद्योगिक

@ औद्योगिक आप क्या मांग रहे हैं? अपने प्रश्न को और समझाएं! आप कई अलग-अलग बातें कहते हैं और मैंने उनमें से एक का उत्तर दिया है, लेकिन आप कहते हैं कि आप इसका उपयोग नहीं करना चाहते ...
अलवर २१'१२

@ गनोम में डिफ़ॉल्ट टेक्स्ट एडिटर को gedit उर्फ ​​"टेक्स्ट एडिटर" कहा जाता है, इसलिए यदि आप चलाते gedit file.filetypeहैं तो आप अपनी इच्छानुसार फ़ाइल खोल देंगे!
अलवर

0

हालांकि मुझे यकीन नहीं है कि वास्तव में यहाँ क्या पूरा किया जाना है और कुछ हालिया टिप्पणियों के आधार पर कि एक स्क्रिप्ट को डिफ़ॉल्ट ऐप में किसी भी फ़ाइल को खोलना चाहिए या ऐप इसका समर्थन करता है।

यदि ऐसा है तो एक आसान तरीका है कि एक टर्मिनल खोलने और scriptname / path / to / filename करने के लिए होगा या यदि पथ में कोई रिक्त स्थान हैं तो scriptname '/ path / to / filename'

cd; mkdir -p bin && gedit ~/bin/openit1

इसे स्क्रिप्ट के रूप में उपयोग करें, आप स्क्रिप्ट के लिए किसी भी नाम का उपयोग कर सकते हैं, मैं उदाहरण के रूप में openit1 का उपयोग करूंगा। यह सबसे अच्छा है जब किसी भी मौजूदा लिनक्स कमांड के साथ कोई टकराव न हो इसके लिए नंबर जोड़ने के लिए ~ ~ बिन से सीधे स्क्रिप्ट का उपयोग करना

#!/bin/bash
xdg-open "$1"

Gedit और टर्मिनल में बंद करें

chmod u+x ~/bin/openit1

अपने $ पथ में ~ / बिन जोड़ने के लिए पुनः आरंभ करें

एक टर्मिनल खोलने और जाने के लिए

openit1 /path/to/filename or openit1 'path/to/filename' 

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


Restart to add ~/bin to your $PATH- ओम, पुरानी विंडोज की आदतें? ;)
यूजर अनजान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.