"Sh" বা "bash" কমান্ড ব্যবহার না করে আমি কীভাবে শেল স্ক্রিপ্ট চালাব?


261

আমার কাছে একটি শেল স্ক্রিপ্ট রয়েছে যা আমি "sh" বা "ব্যাশ" কমান্ড ব্যবহার না করে চালাতে চাই। উদাহরণ স্বরূপ:

পরিবর্তে: sh script.sh

আমি ব্যবহার করতে চাই: script.sh

কিভাবে আমি এটি করতে পারব?

পিএস (i) আমি শেল স্ক্রিপ্টটি খুব বেশি ব্যবহার করি না এবং আমি এলিয়াসগুলি পড়ার চেষ্টা করেছি, তবে কীভাবে সেগুলি ব্যবহার করব তা আমি বুঝতে পারি নি।

(ii) PATH ভেরিয়েবলগুলিতে স্ক্রিপ্টটিকে অন্য একটি ফাইলের সাথে সংযুক্ত করার বিষয়েও পড়েছিলাম। আমি আমার বিশ্ববিদ্যালয়ের সার্ভার ব্যবহার করছি এবং সেই জায়গাগুলিতে আমার কাছে কোনও ফাইল তৈরি করার অনুমতি নেই।


1
উত্তরগুলি কীভাবে স্ক্রিপ্টটি কার্যকর করা যায় তা নির্দেশ করে তবে কীভাবে এটি অ্যাক্সেসযোগ্য করা যায় তা কভার করে বলে মনে হয় না। তার জন্য, নিজেকে একটি বিন ডিরেক্টরি তৈরি করুন - $HOME/bin- আপনার যদি ইতিমধ্যে একটি না থাকে তবে এটি আপনার রাস্তায় যুক্ত করুন (সামনের দিকে)। আপনি যে স্ক্রিপ্টগুলি (এবং অন্য কোনও প্রোগ্রাম) সরাসরি পাথনাম নির্দিষ্ট করতে চান তা এখানে রাখুন বা আসল প্রোগ্রামগুলি এখানে সিমলিংক রাখুন।
জোনাথন লেফলার

1
নীচের উত্তর (গুলি) অনুসরণ করার পরে, ".sh" ফেলে দেওয়ার জন্য আপনি ফাইলটির নাম পরিবর্তন করতে পারেন: mv example.sh exampleএবং তারপরে exampleনিজে থেকেই কাজ করা উচিত।
পিজে ব্রুনেট

উত্তর:


434

আপনার ফাইলের শীর্ষে একটি "শেবাং" যুক্ত করুন:

#!/bin/bash

এবং আপনার ফাইলকে কার্যকর ( chmod +x script.sh) কার্যকর করুন।

অবশেষে, আপনার স্ক্রিপ্টটি যেখানে রয়েছে সেখানে ডিরেক্টরি যুক্ত করতে আপনার পাথটি পরিবর্তন করুন:

export PATH=$PATH:/appropriate/directory

(সাধারণত, আপনি $HOME/binনিজের স্ক্রিপ্টগুলি সংরক্ষণ করার জন্য চান )


আরে, আপনার উত্তর জন্য ধন্যবাদ. আমি চেষ্টা করেছিলাম। এখন আমি এটি "sh" কমান্ড ব্যতীত চালাতে পারি। তবে আমি এখনও "./" কমান্ডটি উপস্থাপন করতে চাই যা আমি চাই না। :)
রমিজ হুসেন

5
পথ সম্পর্কে মন্তব্য দেখুন। আপনাকে আপনার স্ক্রিপ্টটি কোনও ডিরেক্টরিতে রাখতে হবে যা আপনাকে আপনার পাথের সাথে সংযুক্ত করতে হবে।
fge

2
এটি আমার ক্ষেত্রে কার্যকর হয়নি। তবে ভাল source script.shকাজ করেছে, বা বরং source <filename_without_any_extension_type>
মাইক্রোফডি

4
source ./my-cool-script(বা . ./my-cool-script) স্ক্রিপ্টে সংজ্ঞায়িত যে কোনও ভেরিয়েবলের সাথে বর্তমান শেল সেশনটিকে দূষিত করবে। সোর্সিং ব্যবহার করা উচিত নয় যদি না আপনি পরিবেশগত ভার সেট করে, ডিরেক্টরি পরিবর্তন করে ইত্যাদি শেল সেশনটি স্পষ্টভাবে সংশোধন করতে চান না। সত্যিই মারাত্মক বাগগুলি অন্যথায় স্ক্রিপ্ট এক্সিকিউশন থেকে চলক হিসাবে, যদি সোর্সিংয়ের মাধ্যমে করা হয়, অন্য স্ক্রিপ্টের প্রয়োগকে প্রভাবিত করতে পারে।
ড্যানিয়েল ওয়াল্ট্রিপ

3
আপনি যদি নিশ্চিত হন যে স্ক্রিপ্ট ফোল্ডারটি PATH এ রয়েছে এবং এটি এখনও ছাড়া কাজ করে না ./, তবে আপনার নামের সংঘর্ষ হতে পারে। নাম বদলে দেওয়ার চেষ্টা করুন।
chorbs

66

এগুলি সরাসরি স্ক্রিপ্টের নাম ব্যবহারের পূর্বশর্তগুলির মধ্যে কিছু:

  1. she-bang (#!/bin/bash)একেবারে উপরে লাইন যুক্ত করুন ।
  2. chmod u+x scriptnameস্ক্রিপ্টটি কার্যকরযোগ্য করে তোলে Using ( scriptnameআপনার স্ক্রিপ্টের নাম কোথায় )
  3. স্ক্রিপ্টটি /usr/local/binফোল্ডারের নীচে রাখুন ।
  4. স্ক্রিপ্টটির নাম ব্যবহার করে স্ক্রিপ্টটি চালান।

দ্রষ্টব্য: আমি এটিকে /usr/local/binফোল্ডারের নীচে রাখার পরামর্শ দিয়েছি কারণ সম্ভবত এটি ইতিমধ্যে আপনার সাথে যুক্ত হবে PATH variable

হালনাগাদ:

যদি আপনার /usr/local/binফোল্ডারে অ্যাক্সেস না থাকে তবে নিম্নলিখিতগুলি করুন:

  1. আপনার হোম ডিরেক্টরিতে একটি ফোল্ডার তৈরি করুন এবং আসুন এটি কল করুন myscripts
  2. কি ls -lartস্টার্ট আপ স্ক্রিপ্টটি আপনার শেল ব্যবহার করছে চিহ্নিত করতে আপনার হোম ডিরেক্টরীতে উপর। এটি হয় হয় .profileবা হয় .bashrc
  3. একবার আপনি স্টার্ট আপ স্ক্রিপ্ট শনাক্ত করার পরে, আপনার স্ক্রিপ্টে নিম্নলিখিত লাইনটি যুক্ত করুন - export set PATH=$PATH:~/myscript
  4. একবার যোগ হয়ে গেলে আপনার স্টার্ট-আপ স্ক্রিপ্টটি উত্স করুন বা লগ আউট করুন এবং আবার লগ ইন করুন।
  5. ব্যবহার করে আপনার স্ক্রিপ্টটি কার্যকর করুন scriptname

আমি এটি করার চেষ্টা করেছি তবে / ইউএসআর / স্থানীয় / বিন ফোল্ডারটি অ্যাক্সেস করার অনুমতি আমার নেই। আমি একটি বিশ্ববিদ্যালয়ের কম্পিউটার ব্যবহার করছি।
রমিজ হুসেন

1
আপনি কি দয়া করে আমাকে "আপনার স্টার্ট-আপ স্ক্রিপ্ট উত্স" বলতে চাইছেন তা বলতে পারেন?
রমিজ হুসেন

1
স্টার্ট-আপ স্ক্রিপ্টটি উত্সাহিত করার অর্থ এটি সম্পাদন করা যাতে PATH ভেরিয়েবলের নতুন সেট প্যারামিটারটি শেল দ্বারা নেওয়া হয়। এটি করে কাজ করা যায় . .bashrc। অর্থাৎ শুধু করা .দ্বারা অনুসরণ spaceআপনার স্টার্ট আপ স্ক্রিপ্ট নাম এবং তারপর।
জয়পাল সিংহ

সিস্টেমটিতে সমস্যা কী তা আমি জানি না। আমি এটিতে একটি "প্রতিধ্বনি" হ্যালো "" দিয়ে "হ্যালো" নামে একটি নতুন শেল স্ক্রিপ্ট তৈরি করেছি। আমি এর অনুমতিগুলি পরিবর্তন করে চেষ্টা করেছি / এটা কাজ করে না। এটা says-
রমিজ হোসেন

আপনার স্টার্ট আপ স্ক্রিপ্টগুলিতে আপনি কী পরিবর্তন করেছেন?
জয়পাল সিংহ

20

ব্যবহার করে এটি কার্যকর করার যোগ্য তা নিশ্চিত করুন chmod +x। ডিফল্টরূপে, বর্তমান ডিরেক্টরি আপনার PATH এ নেই, সুতরাং আপনাকে এটি হিসাবে চালিত করতে হবে ./script.sh- অথবা অন্যথায় এটি কোনও যোগ্য পথ দ্বারা রেফারেন্স করতে হবে। বিকল্পভাবে, আপনার যদি সত্যই ন্যায়বিচার প্রয়োজন script.sh, আপনার এটি আপনার রাস্তায় যুক্ত করা দরকার। (আপনার কাছে সিস্টেমের পাথটি সংশোধন করার অ্যাক্সেস নাও থাকতে পারে তবে আপনি সম্ভবত নিজের বর্তমান পরিবেশের PATH পরিবর্তন করতে পারেন)) এটিও ধরে নিয়েছে যে আপনার স্ক্রিপ্টটি এরকম কিছু দিয়ে শুরু হয় #!/bin/sh

আপনি এখনও একটি উপনাম ব্যবহার করতে পারেন যা শেল স্ক্রিপ্টিংয়ের সাথে সম্পর্কিত নয় কেবল শেলের সাথে এবং এটি সহজ:

alias script.sh='sh script.sh'

যা আপনাকে কেবল সরলভাবে script.sh(আক্ষরিকভাবে - এটি অন্য কোনও *.shফাইলের জন্য কাজ করবে না ) ব্যবহার করার অনুমতি দেয় sh script.sh


হে! আপনার উত্তর দেওয়ার জন্য ধন্যবাদ. আমি আগে এলিয়াস ব্যবহার করার চেষ্টা করেছি। কিন্তু কিছুই ঘটলো না. আমি এটি "#! / Usr / স্থানীয় / বিন / বাশ" লাইনের পরপরই স্থাপন করেছি। আপনি ভুল কি মনে করেন?
রমিজ হুসেন

1
আপনার স্ক্রিপ্টের মধ্যে একটি উপাধি সংজ্ঞায়িত করা যায় না - এটি আপনার বর্তমান পরিবেশের অংশ হিসাবে ঘোষণা করতে হবে। সুতরাং aliasশেল প্রম্পটে কমান্ডটি চালান , এবং তারপরে কমান্ডটি চালানোর জন্য উলেফটি উপলব্ধ হবে।
ziesemer

17

এই উদাহরণে ফাইল কল করা হবে myShell

সবার আগে আমাদের এই ফাইলটি তৈরি করা দরকার যা আমরা কেবল নিম্নলিখিত টাইপ করে শুরু করতে পারি:

sudo nano myShell

লক্ষ্য করুন আমরা .shএক্সটেনশনটি রাখিনি? এর কারণ এটি যখন আমরা টার্মিনাল থেকে এটি চালিত করি তখন myShellআমাদের কমান্ড চালানোর জন্য কেবল টাইপ করতে হবে !

এখন, ন্যানোতে উপরের লাইনটি #!/bin/bashতখনই হতে হবে আপনি চালিয়ে যাওয়ার আগে একটি নতুন লাইন ছেড়ে যেতে পারেন।

বিক্ষোভের জন্য আমি একটি প্রাথমিক Hello World!প্রতিক্রিয়া যুক্ত করব

সুতরাং, আমি নিম্নলিখিত টাইপ করুন:

echo Hello World!

এর পরে আমার উদাহরণটি দেখতে হবে:

#!/bin/bash
echo Hello World!

এখন ফাইলটি সংরক্ষণ করুন এবং তারপরে এই কমান্ডটি চালান:

sudo chmod +x myShell

এখন আমরা ফাইলটি নির্বাহযোগ্য করে তুলেছি আমরা /usr/bin/নিম্নলিখিত কমান্ডটি ব্যবহার করে এটিকে স্থানান্তর করতে পারি :

sudo cp myShell /usr/bin/

মেশিনটি এটি সঠিকভাবে কার্যকর করতে পারে তা নিশ্চিত করার জন্য আমাদের মেশিনটি পুনরায় বুট করতে হবে

আমি ব্যবহার করতাম sudo shutdown -r now

অভিনন্দন! আমাদের আদেশ এখন সম্পন্ন! টার্মিনালে আমরা টাইপ করতে পারি myShellএবং এটি বলা উচিতHello World!


1
আপনার নিজের ফাইলগুলিতে /usr/binএগুলি রাখা উচিত নয় - অনেকগুলি সিস্টেম /usr/local/binএই উদ্দেশ্যে কার্যকর করে এবং /usr/binওএসের জন্য কঠোরভাবে সংরক্ষণ করে।
ট্রিপলি

sudo chmodআপনার নিজের ফাইলের দরকার নেই ।
ট্রিপলি

মেশিনটি রিবুট করার দরকার নেই। সর্বাধিক আপনার আবার উত্স হওয়া উচিত
লুকা ডি লাইলো

14

আপনাকে প্রোগ্রামটির জন্য এক্সিকিউটেবল বিট সক্ষম করতে হবে।

chmod +x script.sh

তারপরে আপনি ব্যবহার করতে পারেন ./script.sh

আপনি আপনার .bashrcফাইলে PATH ফোল্ডারটি যুক্ত করতে পারেন (আপনার হোম ডিরেক্টরিতে অবস্থিত)। ফাইলের শেষে এই লাইনটি যুক্ত করুন:

export PATH=$PATH:/your/folder/here

আমি উল্লেখ করতে ভুলে গেছি যে আমি ইতিমধ্যে সঠিক অনুমতিগুলি সেট করে রেখেছি। আমি "chmod 755 স্ক্রিপ্ট.শ" কমান্ডটি ব্যবহার করেছি
রমিজ হুসেন

6

আপনি sudo ইনস্টল (স্ক্রিপ্টের নাম) / ইউএসআর / লোকাল / বিন / টাইপ করতে পারেন (যা বলা স্ক্রিপ্টটি কার্যকর করতে টাইপ করতে চান)

যেমন: sudo install quickcommit.sh /usr/local/bin/quickcommit পাসওয়ার্ড লিখুন

এখন .sh ছাড়া এবং যে কোনও ডিরেক্টরিতে চালানো যেতে পারে


3

অ্যাড। (বর্তমান ডিরেক্টরি) আপনার PATH পরিবর্তনশীল।
আপনি নিজের। প্রোফাইল ফাইল সম্পাদনা করে এটি করতে পারেন।
আপনার। প্রোফাইল ফাইলটিতে নিম্নলিখিত লাইনটি রাখুন
PATH=$PATH:.

কেবল #!/bin/bashআপনার স্ক্রিপ্টের শুরুতে শেবাং ( ) লাইন যুক্ত করা এবং স্ক্রিপ্টটি কার্যকর (ব্যবহার করে chmod +x <File Name>) করা নিশ্চিত করুন।


0

এখানে আমার ব্যাকআপ স্ক্রিপ্ট যা আপনাকে ধারণা এবং অটোমেশন দেবে:

সার্ভার: উবুন্টু 16.04 পিএইচপি: 7.0 অ্যাপাচি 2, মাইএসকিএল ইত্যাদি ...

# Make Shell Backup Script - Bash Backup Script
    nano /home/user/bash/backupscript.sh
        #!/bin/bash
        # Backup All Start
        mkdir /home/user/backup/$(date +"%Y-%m-%d")
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_rest.zip /etc -x "*apache2*" -x "*php*" -x "*mysql*"
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_apache2.zip /etc/apache2
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_php.zip /etc/php
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_mysql.zip /etc/mysql
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/var_www_rest.zip /var/www -x "*html*"
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/var_www_html.zip /var/www/html
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/home_user.zip /home/user -x "*backup*"
        # Backup All End
        echo "Backup Completed Successfully!"
        echo "Location: /home/user/backup/$(date +"%Y-%m-%d")"

    chmod +x /home/user/bash/backupscript.sh
    sudo ln -s /home/user/bash/backupscript.sh /usr/bin/backupscript

আপনার ব্যবহারকারী ডিরেক্টরিতে / হোম / ব্যবহারকারীর পরিবর্তন করুন এবং টাইপ করুন: স্ক্রিপ্টটি চালানোর জন্য টার্মিনালের যে কোনও জায়গায় ব্যাকআপসক্রিপ্ট করুন! (ধরে নিলাম / usr / বিন আপনার পথে আছে)


0

"#!/bin/sh"স্ক্রিপ্টের আগে প্রবেশ করান । script.shউদাহরণস্বরূপ এটি সংরক্ষণ করুন । এটিতে অনুলিপি করুন $HOME/bin বা $HOME/usr/bin
ডিরেক্টরিটি বিভিন্ন লিনাক্স ডিস্ট্রোজে আলাদা হতে পারে তবে সেগুলি শেষ হয় 'bin' এবং হোম ডিরেক্টরিতে থাকে cd $HOME/bin বা $HOME/usr/bin
টাইপ হয় chmod 700 script.sh
এবং আপনি কেবল run.sh টার্মিনালে টাইপ করে এটি চালাতে পারেন । যদি এটি কাজ না করে তবে chmod +x run.sh তার পরিবর্তে চেষ্টা করুন chmod 700 run.sh


এই উত্তরের অংশগুলি যা খুব পুরানো বিদ্যমান উত্তরগুলি থেকে তথ্য পুনরুদ্ধার করে না তা বিভ্রান্ত হয়।
ট্রিপলি

0

নির্বাহযোগ্য হিসাবে যে কোনও ফাইল তৈরি করুন


ধরা যাক আপনার কাছে migrate_linux_amd64 নামে একটি এক্সিকিউটেবল ফাইল রয়েছে এবং আপনি এই ফাইলটি "মাইগ্রেট" এর মতো কমান্ড হিসাবে চালাতে চান

  1. প্রথমে ফাইলের অবস্থান থেকে নির্বাহযোগ্য ফাইলটি পরীক্ষা করুন:
[oracle@localhost]$ ./migrate.linux-amd64 
Usage: migrate OPTIONS COMMAND [arg...]
       migrate [ -version | -help ]

Options:
  -source          Location of the migrations (driver://url)
  -path            Shorthand for -source=file://path 
  -database        Run migrations against this database (driver://url)
  -prefetch N      Number of migrations to load in advance before executing (default 10)
  -lock-timeout N  Allow N seconds to acquire database lock (default 15)
  -verbose         Print verbose logging
  -version         Print version
  -help            Print usage

Commands:
  goto V       Migrate to version V
  up [N]       Apply all or N up migrations
  down [N]     Apply all or N down migrations
  drop         Drop everyting inside database
  force V      Set version V but don't run migration (ignores dirty state)
  version      Print current migration version
  1. নিশ্চিত করুন যে আপনার
    -rwxr-xr-x 1 oracle oinstall 7473971 May 18 2017 migrate.linux-amd64
    যদি ফাইলটিতে অধিকারগুলি কার্যকর করা হয় তবে তা না চালানোchmod +x migrate.linux-amd64

  2. তারপরে আপনার ফাইলটি অনুলিপি করুন /usr/local/bin। এই ডিরেক্টরিটি রুটের মালিকানাধীন, sudo বা রুটে স্যুইচ করুন এবং নিম্নলিখিত ক্রিয়াকলাপটি সম্পাদন করুন

sudo cp migrate.linux-amd64 /usr/local/bin
sudo chown oracle:oracle /user/local/bin/migrate.linux.amd64
  1. তারপরে নীচের মতো একটি প্রতীকী লিঙ্ক তৈরি করুন
sudo ln /usr/local/bin/migrate.linux.amd64 /usr/local/bin/migrate
sudo chown oracle:oracle /usr/local/bin/migrate
  1. অবশেষে আপনার পথে বা ব্যবহারকারীর প্রোফাইলে / usr / স্থানীয় / বিন যোগ করুন
export PATH = $PATH:/usr/local/bin
  1. তারপরে "মাইগ্রেট" হিসাবে কমান্ডটি চালান
[oracle@localhost]$ migrate
Usage: migrate OPTIONS COMMAND [arg...]
       migrate [ -version | -help ]

Options:
  -source          Location of the migrations (driver://url)
  -path            Shorthand for -source=file://path 
  -database        Run migrations against this database (driver://url)
  -prefetch N      Number of migrations to load in advance before executing (default 10)
  -lock-timeout N  Allow N seconds to acquire database lock (default 15)
  -verbose         Print verbose logging
  -version         Print version
  -help            Print usage

Commands:
  goto V       Migrate to version V
  up [N]       Apply all or N up migrations
  down [N]     Apply all or N down migrations
  drop         Drop everyting inside database
  force V      Set version V but don't run migration (ignores dirty state)
  version      Print current migration version

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