টার্মিনালে আমি কীভাবে বাশ স্ক্রিপ্ট চালাব?


108

আমার মতো বাশ স্ক্রিপ্ট রয়েছে:

#!/bin/bash

echo Hello world!

আমি এটি টার্মিনালে কীভাবে কার্যকর করব?


27
এটির অনুমতি কার্যকর করার কি আছে? ব্যবহার করে দেখুন chmod +x scriptnameএবং তারপর ./scriptname
dirkgently

উত্তর:


49

$prompt: /path/to/scriptএবং এন্টার চাপুন। দ্রষ্টব্য আপনার স্ক্রিপ্টের অনুমতি কার্যকর করেছে তা নিশ্চিত করা দরকার।


1
আপনি যদি ইতিমধ্যে /path/to ডিরেক্টরিতে থাকেন, উদাহরণস্বরূপ, cd /path/toকমান্ডের সাহায্যে, আপনি ./scriptআপনার স্ক্রিপ্টটি চালাতে প্রবেশ করতে পারেন forget ভুলে যাবেন না, এই ক্ষেত্রে './' 'স্ক্রিপ্ট'-এর আগে থাকবে
FrViPofm


26

স্ক্রিপ্টটি রয়েছে এমন ডিরেক্টরিতে সিডি করুন, বা এটি আপনার $ PATH- এ থাকা একটি বিন ফোল্ডারে রেখে দিন

তারপরে টাইপ করুন

./scriptname.sh

একই ডিরেক্টরি বা যদি

scriptname.sh

যদি এটি বিন ফোল্ডারে থাকে।


9
স্ক্রিপ্টটিতে এক্সিকিউট বিট সেট থাকলে এটি কাজ করবে। যে সম্ভবত সমাধান করা প্রয়োজন।
ব্রায়ান ওকলে

./scriptname.shআমার জন্য কাজ করে কিন্তু scriptname.shদেয় scriptname.sh: command not found-rwxr-xr-xএর অনুমতি আছে।
স্পিক্যাট্রিক্স

1
যে cdকোনও জায়গায় পরামর্শটি অন্য একটি সাধারণ প্রাথমিক ভুল বোঝাবুঝির ঘটনা ঘটায়। যদি স্ক্রিপ্টটির অভ্যন্তরীণভাবে নির্ভরশীলতা না থাকে যার জন্য এটি কোনও নির্দিষ্ট ডিরেক্টরিতে চালিত হয় (যেমন, কোনও ডেটা ফাইল পড়ার প্রয়োজন যা স্ক্রিপ্ট অনির্বাচিতভাবে নির্দেশ করতে কোনও বিকল্প সরবরাহ করে না) cdএটি চালানোর জন্য আপনার কখনই দরকার হবে না এবং খুব খুব প্রায়শই চাইবে না।
ট্রিপলি

24

আপনি করতে পারেন:
sh scriptname.sh


6
ডাউনভোট: যদি এটি সঠিকভাবে কোনও বাশ স্ক্রিপ্ট হয় তবে এটি ভুল।
ট্রিপলি

1
আপভোট: আপনার বাশ স্ক্রিপ্ট একই ডিরেক্টরিতে থাকলে ম্যাক ওএস এক্সে এটি ঠিক আছে
কার্ল টেলর

30
@ কোট "" এটি আমার পক্ষে কাজ করে "এটি" এটি সঠিক উত্তর "থেকে খুব দূরে। এটি কাজ করতে পারে যদি shসিম্পলিংক হয় bashবা স্ক্রিপ্টটি কোনও ব্যাশ-নির্দিষ্ট নির্মাণ ব্যবহার করে না। পূর্ববর্তী ক্ষেত্রে, bashপরিবর্তে ব্যবহার করা shহ'ল একমাত্র সঠিক, পোর্টেবল সমাধান; পরবর্তী ক্ষেত্রে, এটি এই নির্দিষ্ট প্রশ্নের সঠিক উত্তর নয়, কারণ ওপি বিশেষত বাশ লিপির জন্য পরামর্শ চেয়েছিল। ভুল উত্তোলন করা দায়িত্বজ্ঞানহীন; ব্যবহারকারীরা যারা প্রায়শই এখানে পোস্ট করে তফাতটি বুঝতে ব্যর্থ হন এবং তাদের দেখানো দরকার কেন এটি "আমার পক্ষে কাজ করেছে" উত্তরটি তাদের পক্ষে কার্যকর হয়নি।
ট্রিপলি

: খুব ^ এই বিষয়ে বিভিন্ন জনপ্রিয় ডুপ্লিকেট লক্ষ্যমাত্রা এক @kraftydevil stackoverflow.com/questions/5725296/...
tripleee

5
@ কোট আমি পুনরায় বলছি: এমন পরিস্থিতি রয়েছে যেখানে এটি কাজ করে (ঠিক যেমনটি আপনি জানতে পেরেছিলেন) তবে শিরোনামে প্রশ্নের সাধারণ ক্ষেত্রে এটি সঠিক উত্তর নয়। খুব কমপক্ষে, এই উত্তরের মধ্যে এটি যে পরিস্থিতিতে কাজ করে তা ব্যাখ্যা করা উচিত; তবে আমার পরামর্শটি হ'ল কেবল এই উত্তরটি মুছুন।
ট্রিপলি

14

প্রথমত আপনি এটি ব্যবহার এক্সিকিউটেবল করতে হবে: chmod +x name_of_your_file_script

আপনি এটি কার্যকর করার পরে, আপনি এটি ব্যবহার করে চালাতে পারেন ./same_name_of_your_file_script


10

সিডি কমান্ড ব্যবহার করে স্ক্রিপ্টটি যেখানে অবস্থিত সেখানে আপনার ডিরেক্টরিটি পরিবর্তন করুন

তারপরে টাইপ করুন

bash program-name.sh

6
cdকোথাও দরকার নেই ; যুক্তি হিসাবে আপনি একটি নির্বিচারে জটিল পথের নামটি নির্দিষ্ট করতে পারেন bash; প্রকৃতপক্ষে, যে কোনও প্রোগ্রাম যা কোনও ফাইল নামের যুক্তিটি গ্রহণ করে সেগুলি এইভাবে কাজ করে (বা ভীতিজনকভাবে, মনের-অদ্ভুতভাবে ভাঙা)।
ট্রিপলি

10

এটি একটি পুরানো থ্রেড, তবে আমি এটি জুড়ে এসেছি এবং আমি অবাক হয়েছি যে এখনও পর্যন্ত কেউ একটি সম্পূর্ণ উত্তর দেয়নি। সুতরাং এখানে যায় ...

একটি কমান্ড লাইন স্ক্রিপ্ট টিউটোরিয়াল নির্বাহ!

প্রশ্ন: আমি কীভাবে এটি টার্মিনালে চালাব?

বিভ্রান্তি এবং সংঘাত:

  • আপনাকে যা না একটি 'এক্সটেনশন' (.sh বা .py বা অন্য কিছু মত) প্রয়োজন, কিন্তু এটি কিছু ট্র্যাক রাখতে সাহায্য করে। এতে ক্ষতি হবে না। স্ক্রিপ্টের নামটিতে যদি কোনও এক্সটেনশন থাকে তবে আপনাকে অবশ্যই এটি ব্যবহার করতে হবে।
  • আপনাকে যা না কোন কারণে একেবারেই কোনও নির্দিষ্ট ডিরেক্টরির মধ্যে হতে হবে।
  • আপনাকে যা না প্রোগ্রাম যা ফাইল (BASH বা পাইথন বা যাই হোক না কেন), যদি না আপনি করতে চান রান নাম টাইপ করতে হবে। এতে ক্ষতি হবে না।
  • আপনার এগুলির কোনও কাজ করার দরকার নেই sudo। এই কমান্ডটি অন্য ব্যবহারকারী বা 'রুট' (প্রশাসক) ব্যবহারকারী হিসাবে চলমান কমান্ডের জন্য সংরক্ষিত। দুর্দান্ত পোস্ট এখানে

(যে ব্যক্তি কেবলমাত্র স্ক্রিপ্টগুলি কার্যকর করতে শিখছেন সেগুলি নতুন প্রোগ্রাম ইনস্টল করার মতো প্রকৃত প্রয়োজন না হলে এই কমান্ডটি ব্যবহার করা উচিত নয় your আপনার স্ক্রিপ্টগুলি রাখার জন্য একটি ভাল জায়গা আপনার bin / বিন ফোল্ডারে রয়েছে by আপনি সেখানে যেতে পারেন টাইপ করতে cd ~/binবা cd $HOME/binটার্মিনাল প্রম্পট থেকে that ফোল্ডারে আপনার সম্পূর্ণ অনুমতি থাকবে))

ইউনিক্স / লিনাক্স টাইপ সিস্টেমে টার্মিনাল থেকে "এই স্ক্রিপ্টটি কার্যকর করতে" আপনাকে তিনটি জিনিস করতে হবে:

  1. সিস্টেমটিকে স্ক্রিপ্টের অবস্থানটি বলুন। (একটা তোল)

    • স্ক্রিপ্টের নাম সহ পুরো পথটি টাইপ করুন (যেমন /path/to/script.sh)। আপনি টাইপ করে pwdবা পুরো পথটি যাচাই করতে পারেনecho $PWD টার্মিনালে ।
    • একই ডিরেক্টরি থেকে চালিত করুন এবং ./পথের জন্য ব্যবহার করুন (উদাঃ ./script.sh)। সহজ।
    • স্ক্রিপ্টটি সিস্টেমে থাকা ডিরেক্টরিতে রাখুন এবং PATHনামটি (টাইপ করুন script.sh) টাইপ করুন । আপনি PATHটাইপ করে echo $PATHবা echo -e ${PATH//:/\\n}যদি একটি সুন্দর তালিকা চান তবে আপনি সিস্টেমটি যাচাই করতে পারেন।
  2. সিস্টেমটিকে বলুন যে স্ক্রিপ্টটি কার্যকর করার অনুমতি পেয়েছে। (একটা তোল)

    • chmod +x /path/to/script.shটার্মিনালে টাইপ করে "এক্সিকিউট বিট" সেট করুন ।
    • আপনি chmod 755 /path/to/script.shযদি সংখ্যা পছন্দ করেন তবে আপনি এটিও ব্যবহার করতে পারেন। একটা শীতল চার্ট সঙ্গে একটি মহান আলোচনা এখানে
  3. সিস্টেমটিকে স্ক্রিপ্টের ধরণটি বলুন। (একটা তোল)

    • স্ক্রিপ্টের আগে প্রোগ্রামটির নাম টাইপ করুন। (যেমন BASH /path/to/script.shবা PHP /path/to/script.php) স্ক্রিপ্টটির যদি কোনও এক্সটেনশন থাকে, যেমন। php বা .py, এটি স্ক্রিপ্ট নামের অংশ এবং আপনাকে অবশ্যই এটি অন্তর্ভুক্ত করতে হবে।
    • একটি শেবাং ব্যবহার করুন , যা আমি দেখতে পাচ্ছি ( #!/bin/bash) আপনার উদাহরণটিতে। আপনার স্ক্রিপ্টের প্রথম লাইন হিসাবে যদি এটি থাকে তবে সিস্টেমটি সেই প্রোগ্রামটি স্ক্রিপ্টটি কার্যকর করতে ব্যবহার করবে। প্রোগ্রাম টাইপ করার বা এক্সটেনশনগুলি ব্যবহার করার দরকার নেই।
    • একটি "বহনযোগ্য" শেবাং ব্যবহার করুন । এছাড়াও আপনি সিস্টেম প্রোগ্রামের সংস্করণ প্রথম যে পছন্দ করে থাকতে পারে PATHব্যবহার করে #!/usr/bin/envপ্রোগ্রাম নাম (যেমন দ্বারা অনুসরণ #!/usr/bin/env bashবা #!/usr/bin/env python3)। এখানে পুঙ্খানুপুঙ্খভাবে আলোচনা হিসাবে বিভিন্ন মতামত আছে

1
খুব ভাল সংক্ষিপ্তসার। সম্ভবত শেষ উদাহরণে লোকেরা মনে করিয়ে দেয় যে script.shএবং script.phpএই স্ক্রিপ্টগুলির আক্ষরিক ফাইলের নাম এবং আপনি যদি ফাইলের নামটিতে একটি এক্সটেনশন রেখে থাকেন তবে স্ক্রিপ্টটি চালানোর সময় আপনাকে এটি অন্তর্ভুক্ত করতে হবে (এবং বিপরীতে; যদি স্ক্রিপ্টটি না করে ' টি এর একটি এক্সটেনশন রয়েছে, একটি রাখবেন না)। এটি যেমন ডস এর বিপরীতে যেখানে আপনি ফাইলের নাম .batবা .exeফাইল নাম বাদ দিতে পারেন এবং এক্সিকিউটেবল হিসাবে বিবেচিত হওয়ার জন্য ফাইলগুলি একটি ছোট সেট থেকে এক্সটেনশন থাকা দরকার।
ট্রিপলি

1
আরেকটি সাধারণ শিক্ষানবিস ভুল মধ্যে পার্থক্য ভুল বুঝা হয় path, /path, ./path, এবং ~/path। আমি অনুমান করি আপনি সম্ভবত এটি এখানে ব্যাখ্যা করতে চান না, তবে সম্ভবত কোনও ব্যাখ্যাটির সাথে লিঙ্ক করুন ... ওহ ডাং, আমাকে এটি পোস্ট করতে হয়েছিল
ট্রিপলি

1

এবং আরও একটি উপায়

. /path/to/script

বিন্দুর অর্থ কী?


এটি বর্তমান শেলটিতে স্ক্রিপ্টটি কার্যকর করে, যা ডেকে আনা দরকার। আপনি যখন কোনও স্ক্রিপ্ট চালান তখন বেশিরভাগ লোকেরা এমনটাই প্রত্যাশা করে না। এটি আপনার বিদ্যমান পরিবেশে পার্শ্ব প্রতিক্রিয়া হতে পারে।
সফটওয়্যার ইঞ্জিনিয়ার

-2

আপনি যদি কোনও ডিরেক্টরি বা ফোল্ডারে থাকেন যেখানে স্ক্রিপ্ট ফাইল উপলব্ধ থাকে তবে কেবল সম্পাদনযোগ্য মোডে ফাইলের অনুমতিটি পরিবর্তন করে করুন

chmod +x your_filename.sh

এর পরে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে স্ক্রিপ্টটি চালাবেন।

$ sudo ./your_filename.sh

উপরে "." বর্তমান ডিরেক্টরি উপস্থাপন। বিঃদ্রঃ! আপনি যদি সেই ডিরেক্টরিতে নেই যেখানে বাশ স্ক্রিপ্ট ফাইলটি উপস্থিত থাকে তবে আপনি যেখানে ডিরেক্টরিটি ফাইলটি ব্যবহার করে সেখানে অবস্থিত করেন change

cd Directory_name/write the complete path

কমান্ড। অন্যথায় আপনার স্ক্রিপ্ট চলতে পারে না।


আশা করি সম্পূর্ণরূপে সবাই এটি করবে কারণ আমি এই বিশেষ সমস্যা সম্পর্কিত সমস্ত সম্পর্কিত ধারণাটি উল্লেখ করেছি।
হাসান শমশির

যেমনটি এখানে অন্যান্য উত্তরে বর্ণিত হয়েছে, sudoএটি ভুল এবং সম্ভাব্য মারাত্মকভাবে ভুল যদি আপনি এটি অবিশ্বস্ত স্ক্রিপ্টে ব্যবহার করেন যা অকারণে আপনাকে দেওয়া শক্তিগুলিকে অপমান করে।
ট্রিপলি

cdকোথাও দেওয়া পরামর্শটি বোঝা শক্ত তবে সম্ভবত ভুলও।
ট্রিপলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.