मैं टर्मिनल कमांड के लिए स्क्रिप्ट फ़ाइल कैसे बनाऊँ?


114

विंडोज में मैं cmd ​​(आमतौर पर .cmdया .batफाइल) के लिए कमांड वाली फाइल लिख सकता हूं । जब मैं उन फाइलों पर क्लिक करता हूं तो यह खुल जाती हैं cmd.exeऔर उन्हें चलाती हैं।

मैं उबंटू में यह कैसे करूंगा?

मुझे यकीन है कि यह एक डुप्लिकेट है, लेकिन मुझे अपना जवाब नहीं मिल रहा है।
यह इन सवालों के समान है, लेकिन वे इस सवाल का जवाब नहीं देते हैं:

किसी फ़ाइल में अक्सर उपयोग किए जाने वाले टर्मिनल कमांड स्टोर करें

CMD.exe Ubuntu में .cmd / .bat फ़ाइल को चलाने के लिए

जवाबों:


150

दो विधियाँ हैं।

सबसे पहले, एक फ़ाइल लिखना सबसे आम है, सुनिश्चित करें कि पहली पंक्ति है

#!/bin/bash

फिर फाइल को सेव करें। अगला निशान इसे प्रयोग करने योग्य निष्पादन योग्य हैchmod +x file

फिर जब आप क्लिक करेंगे (या टर्मिनल से फाइल चलाएंगे) कमांड निष्पादित हो जाएंगे। कन्वेंशन द्वारा इन फाइलों का आमतौर पर कोई विस्तार नहीं होता है, हालाँकि आप इन्हें .shकिसी भी तरह से समाप्त कर सकते हैं ।

कुछ नोट:

  • किसी भी (और मेरा मतलब किसी भी) फ़ाइल को लिनक्स में निष्पादित किया जा सकता है बशर्ते पहली पंक्ति उस प्रोग्राम का एक रास्ता है जिसे फ़ाइल की व्याख्या करनी चाहिए। सामान्य उदाहरणों में शामिल /bin/python, /bin/sh, /bin/dash, लेकिन फिर भी अजीब गेंद चीजों की तरह काम करते हैं/bin/mysql
  • बैश एक पूर्ण भाषा है। यह विन्डोज़ में cmd.exe की तुलना में बहुत अधिक जटिल है। इसमें एक मजबूत प्रोग्रामिंग भाषा है जो फ़ंक्शन, लूप, सशर्त, स्ट्रिंग संचालन आदि का समर्थन करती है।
  • यदि आप समस्याओं में भाग लेते हैं तो ये दस्तावेज़ मदद कर सकते हैं।
  • यदि आप फ़ाइल को निष्पादन योग्य बनाना नहीं चाहते हैं, तो आप इसे बैश के तर्क के रूप में पास करके चला सकते हैं: bash file/to/run.sh

एक साधारण बैश उदाहरण

#!/bin/bash  
echo "This is a shell script"  
ls -lah  
echo "I am done running ls"  
SOMEVAR='text stuff'  
echo "$SOMEVAR"

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


आप परिवर्तन करना चाहते हैं कि हो सकता है /bin/bashके लिए /bin/sh, पार्टी भी नहीं उबंटू के लिए डिफ़ॉल्ट है।
TC1

@ TC1 यह डिफ़ॉल्ट रूप से स्थापित है, इसलिए यह डिफ़ॉल्ट है या नहीं, इससे कोई फर्क नहीं पड़ता।
कार्लोस कैंपड्रोस

1
मैं यह इंगित करना चाहता हूं कि /bin/dash(जो /bin/shआमतौर पर सहमी हुई है), बैश की तुलना में बहुत तेज है (मैंने लगभग 15 गुना तेजी से मापा)। यदि संभव हो तो, /bin/dashशेल स्क्रिप्ट के लिए उपयोग करें :)
MiJyn

4
यदि आपकी फ़ाइल के समान फ़ोल्डर में सुनिश्चित करें कि ./file.sh
coteyr

1
मैंने दोनों तरीकों की कोशिश की, लेकिन अगर मैं बैश स्क्रिप्ट फ़ाइल को डबल-क्लिक करने का प्रयास करता हूं, तो यह सिर्फ संपादन के लिए तैयार geany / gedit में पाठ फ़ाइल को खोलता है। मैं स्क्रिप्ट को डबल-क्लिक पर निष्पादित करना चाहता हूं। यह प्रश्न अधिक विवरण रखता है कि मैं क्या करना चाहता हूं।
थायरो

15

आप एक शेल स्क्रिप्ट का उपयोग कर एक फ़ाइल को लिखने का मतलब है? यहाँ कुछ तरीके हैं:

touch file

यह विधि केवल एक फ़ाइल बनाएगी, लेकिन यदि फ़ाइल पहले से मौजूद है, तो यह आपके द्वारा उस आदेश का उपयोग करने के समय में संशोधन तिथि को बदल देती है।

echo "text" > file

यह विधि की सामग्री को ओवरराइट करती fileहै text। यदि आप कोई फ़ाइल साफ़ करना चाहते हैं, तो आप बस यह कर सकते हैं:

echo "" > file

मान लें कि आप इसे एक से अधिक पंक्ति में लिखना चाहते हैं, और आप हजारों echoआदेशों का उपयोग नहीं करना चाहते हैं , आप इस आदेश का उपयोग करेंगे:

cat << EOF > file
test
test1
foo
bar
EOF

यह आपको एक कमांड में कई लाइनें लिखने में सक्षम बनाता है। fileतब की सामग्री यह होगी:

test
test1
foo
bar

यदि आप किसी फ़ाइल में जोड़ना चाहते हैं, तो प्रतिस्थापित >करें >>

उम्मीद है की यह मदद करेगा!


संपादित करें : ओह, मैं देख रहा हूं, इसलिए आप .shएक्सटेंशन (वैकल्पिक, लेकिन यह एक अच्छा विचार है) का उपयोग करके फ़ाइल को gedit में लिखेंगे , और फिर फ़ाइल प्रबंधक पर, फ़ाइल पर राइट क्लिक करें, गुण-> अनुमतियाँ चुनें और जांचें Allow executing file as program। फिर आप उस पर डबल-क्लिक कर सकते हैं और यह चलेगा :)। इसके अलावा, यदि आप टर्मिनल में ऐसा करना चाहते हैं, तो आप इसे निष्पादित करने के लिए इस कमांड को चला सकते हैं ( sudoयदि आप इसके लिए नहीं हैं तो आप इसे प्रस्तुत करना चाहते हैं):

chmod +x file

और चलाने के लिए:

./file

वास्तव में मैं जो करना चाहता हूं वह एक फाइल लिखना है, गेडिट का कहना है, जिसमें टर्मिनल कमांड शामिल हैं। फिर जब मैं इस फाइल को डबल क्लिक करता हूं तो यह उन कमांड को टर्मिनल में चला देगा।
सेठ

महान जवाब, विचारशील अद्यतन। बस एक फ़ाइल बनाने के लिए, मैंने हमेशा इस्तेमाल किया हैtouch filename
TryTryAgain

@TryTryAgain, हां जो एक आसान तरीका है, शायद इससे भी तेज echo "" > file। क्या यह ठीक है अगर मैं अपने उत्तर में वह विधि शामिल करूं?
MiJyn

@MiJyn बिल्कुल इसे शामिल करें, स्वतंत्र महसूस करें। धन्यवाद
ट्राईएजैन

मैं इसे किसी भी टर्मिनल में चलाने के लिए कैसे बना सकता हूं ... एक वैश्विक कमांड की तरह?
ओमर

14

Windows बैच फ़ाइलों के बराबर शेल स्क्रिप्ट है, और एक उत्कृष्ट आरंभ करने वाला गाइड है बैश स्क्रिप्टिंग

अधिकांश भाग के लिए, कमांड लाइन पर आप जो कमांड दर्ज कर सकते हैं, उसे शेल स्क्रिप्ट में रखा जा सकता है।

कुछ चीजें जो विंडोज बैच की फाइलों से अलग हैं:

  • अलग-अलग कमांड व्याख्याकार हैं, जिन्हें शेल कहा जाता है। डिफ़ॉल्ट बश है, लेकिन अगर आप रुचि रखते हैं, तो अन्य हैं, जैसे कि ज़श, क्ष, डैश, पर्ल, अजगर, आदि।

  • शेल स्क्रिप्ट चलाने के लिए, आपको फ़ाइल को निष्पादन योग्य बनाने की आवश्यकता है, जिसे आप कर सकते हैं chmod +x <filename>

  • उबंटू में, वर्तमान निर्देशिका प्रोग्राम खोज पथ नहीं है, इसलिए आपको चलाने की आवश्यकता है ./<filename>, नहीं<filename>

  • परिवर्तनीय नाम हैं $<varname>, नहीं%<varname>%

  • शेल स्क्रिप्ट में कमांड्स डिफ़ॉल्ट रूप से प्रिंट नहीं होते हैं, जैसे कि बैच फ़ाइल में।

  • फ़ाइल नाम का विस्तार .shया (अधिक प्रथागत) हो सकता है आपको एक्सटेंशन का उपयोग करने की आवश्यकता नहीं है। फ़ाइल की पहली पंक्ति पर रखें#!/bin/bash , जो उबंटू को बताता है कि फ़ाइल को चलाने के लिए किस प्रोग्राम का उपयोग करना है।

  • टिप्पणियाँ शुरू होती हैं #, नहीं rem

आशा है कि यह मदद करता है और मजेदार स्क्रिप्टिंग है!

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