অন্য ডিরেক্টরি থেকে স্ক্রিপ্ট চালানো


11

বেশিরভাগ ক্ষেত্রেই, আমি যে স্ক্রিপ্টটি চালাতে চাই তা আমার বর্তমান ওয়ার্কিং ডিরেক্টরিতে নেই এবং আমি সত্যিই এটি ছেড়ে যেতে চাই না।

অন্য ডিরেক্টরি থেকে স্ক্রিপ্টগুলি (BASH, পার্ল ইত্যাদি) চালানো কি ভাল অনুশীলন? তারা কি সঠিকভাবে চালানোর জন্য প্রয়োজনীয় সমস্ত জিনিসগুলি খুঁজে পাবেন?

যদি তা হয় তবে "দূরবর্তী" স্ক্রিপ্টটি চালানোর সেরা উপায় কী? তাই কি

. /path/to/script

অথবা

sh /path/to/script

এবং এই sudoজাতীয় ক্ষেত্রে কীভাবে ব্যবহার করবেন ? উদাহরণস্বরূপ, এটি কাজ করে না:

sudo . /path/to/script

স্ক্রিপ্ট . /path/to/script উত্স যে সচেতন ! আপনি কেবল এটি চালাতে চাইলে আপনার পিরিয়ডের মোটেই প্রয়োজন হয় না।
gniourf_gniourf

উত্তর:


14

sh / পাথ / টু / স্ক্রিপ্ট আপনার নতুন শেল ছাড়াই একটি নতুন শেল তৈরি করবে এবং সে স্ক্রিপ্টটি চালাবে। source(।) কমান্ড বর্তমান শেল স্ক্রিপ্ট-এ সব কমান্ড কল হবে। যদি স্ক্রিপ্টটি exitউদাহরণস্বরূপ কল করতে থাকে তবে আপনি বর্তমান শেলটি হারাবেন। এ কারণে সাধারণত sh এর সাথে পৃথক শেলের মধ্যে স্ক্রিপ্টগুলি কল করা বা সম্পূর্ণ (/ দিয়ে শুরু করে) বা আপেক্ষিক পথ (./) ব্যবহার করে বাইনারি হিসাবে চালিত করা নিরাপদ। যদি বাইনারি হিসাবে ডাকা হয়, তাদের নির্দিষ্ট দোভাষী (#! / বিন / বাশ, উদাহরণস্বরূপ) দিয়ে মৃত্যুদন্ড কার্যকর করা হবে।

কোনও স্ক্রিপ্টের জন্য প্রয়োজনীয় ফাইলগুলি সন্ধান করবে কিনা তা জানার জন্য, স্ক্রিপ্টটি দেখে কী হয় তা দেখার জন্য এর চেয়ে ভাল উত্তর নেই। বিকল্প হিসাবে, আপনি সর্বদা আপনার বর্তমান ফোল্ডারটি ছাড়াই উপ-প্রক্রিয়াতে স্ক্রিপ্টের ফোল্ডারে যেতে পারেন:

$(cd /wherever/ ; sh script.sh)

3
মানে (cd /wherever/ ; sh script.sh)? তোমার $সামনে কেন আছে ?
জি-ম্যান বলছেন 'মনিকাকে পুনরায় ইনস্টল করুন'

7

আপনি অবশ্যই এটি করতে পারেন (অন্যদের মতো sudo sh /pathto/script.shবা ঠিক মতো সামঞ্জস্য করার সাথে ./script.sh)। যাইহোক, ডায়ার সম্পর্কে চিন্তা না করার জন্য এবং আমাকে অকেজো অতিরিক্ত টাইপিং বাঁচাতে আমি সিস্টেমকে প্রশস্ত করতে কয়েকটি জিনিসগুলির মধ্যে একটি করি।

1) SyMLink এ /usr/bin

ln -s /home/username/Scripts/name.sh /usr/bin/name

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

2) স্ক্রিপ্টস দিরকে আপনার পথে যুক্ত করুন (.bash_profile ব্যবহার করে - বা যাই হোক না কেন আপনার প্রোফাইলে আপনার শেল রয়েছে)

PATH=/path/to/scripts/:$PATH

3) ওরফে এর তৈরি করুন .bash_profile মধ্যে ~/.bash_profileমত অ্যাড কিছু:

alias l="ls -l"

আপনি যেমন বলতে পারেন যে সিনট্যাক্সটি কেবলমাত্র ওরফে, অঙ্কগুলি আপনি একটি আদেশ, কমান্ড হিসাবে কাজ করতে চান s সুতরাং টার্মিনালের যে কোনও জায়গায় "l" টাইপ করার ফলে ls -l যদি আপনি সুডো চান, কেবল alias sl="sudo ls -l"নিজের কাছে লক্ষ করুন l vs sl (একটি অকেজো উদাহরণ হিসাবে)।

যে কোনও উপায়ে আপনি কেবল টাইপ sudo nameofscriptকরতে এবং আপনার পথে যেতে পারেন। ./ বা সাথে গণ্ডগোল করার দরকার নেই। বা sh ইত্যাদি। কেবল এটিকে প্রথমে নির্বাহযোগ্য হিসাবে চিহ্নিত করুন: ডি


আমি বিকল্পটি 2 টি পুনঃনির্মাণ করতে চাই
বার্নহার্ড

কেন ?, এটি একটি সেরা অনুশীলন বা কেবল স্বাদ?
সার্জিও

3

আমি সাধারণত আপনি যেমন বলেন তা করি

sh /path/to/script

এবং এটি রুট / সুপারভাইজার হিসাবে চালানো

sudo sh /path/to/script

আপনার বর্তমান ডিরেক্টরিটি কেবল তখনই গুরুত্বপূর্ণ যখন স্ক্রিপ্টগুলি ধরে নেয় আপনি একই ফোল্ডারে রয়েছেন। আমি ধরে নেব যে বেশিরভাগ স্ক্রিপ্টগুলি এটি না করে এবং আপনি এটি উপরের মতো চালানোর জন্য সংরক্ষণ করছেন।


নিরাপদ_পথটি / ইত্যাদি /
সুডোয়ার্স

3

আমি সাধারণত আমার স্ক্রিপ্টগুলিতে /usr/local/binবা /usr/local/sbin/(যদি স্ক্রিপ্টটির মূল সুবিধার প্রয়োজন হয়) রাখি যেখানে ফাইলসাইম হায়ারার্কি স্ট্যান্ডার্ড (এফএইচএস) অনুসারে সেগুলি অন্তর্ভুক্ত।

আপনাকে যা করতে হবে তা হ'ল এই দুটি ডিরেক্টরি আপনার যুক্ত হয়েছে কিনা তা নিশ্চিত করা PATH। আপনি আপনার $HOME/.bashrcফাইল সম্পাদনা করে এবং এই লাইনটি যুক্ত করে এটি করতে পারেন :

export PATH=$PATH:/usr/local/sbin:/usr/local/bin

আপনি যদি কোনও স্ক্রিপ্টকে রুট হিসাবে চালাতে সক্ষম হতে চান তবে আপনাকে sudoআপনার ডিরেক্টরিতে ভেরিয়েবলের secure_pathসাথে এই ডিরেক্টরিগুলি যুক্ত করতে হবে /etc/sudoers

Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

এই ফাইলটি সম্পাদনা চালানো দ্বারা সম্পন্ন হয়েছে visudoযা নিশ্চিত করে যে আপনার কোনও ভুল নেই।


টাইপো: এর .bashrcপরিবর্তে আপনার অর্থ .bachrc
gniourf_gniourf

0

আমি নিশ্চিত নই যে এটি লিনাক্সে এর মতো কাজ করে, ধরে নিই যে এটির কোনও প্রস্তাব না দিলে তা হয় না। পরিবর্তে ডিরেক্টরিতে ফিরে যেতে ./// ব্যবহার করুন। এটিকে নিখুঁত পথ দেওয়ার জন্য আপনি কি উদ্ধৃতি ব্যবহার করতে পারেন? এটি আপনাকে পুরো ড্রাইভে অ্যাক্সেস দেয় না এমনকি এমনটি করতে সক্ষম হতে পারে যা বাস্তবে এটি ভাবতে আসে।


0

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

alias run-script="cd /home/user/path/to/script/ && bash script.sh"

এটিকে কাজ করতে আপনাকে আর কোনও পরিবর্তন করতে হবে না।


0

কেন কেউ এটিকে পরামর্শ দেয়নি তা নিশ্চিত নয় তবে এটি অত্যন্ত সহজ! আমি কয়েকবার গুগল করেছি এবং এই সঠিক উত্তরটি আমি খুঁজে পাচ্ছি না তাই আমি ভাবছিলাম ভাগ করে নেব। আইএমও, এটি তবে সবচেয়ে ভাল সমাধান, আমার পক্ষে সহজতমও, তবে অন্যেরা অন্যরকম জিনিস অনুভব করতে এবং করতে পারে।

# Place this somewhere in your .bashrc/.bash_profile/etc and edit as you see fit

YOURCOMMAND () {
  cd /path/to/directory/containing/your/script/ && ./YOURSCRIPT
}

প্রথমে 'সিডি' কমান্ডটি স্ক্রিপ্টগুলির অবস্থানের ডিরেক্টরিটি বলছে। তারপরে '&&' যাতে আপনি পরবর্তী কমান্ডটি উত্তেজিত করার পরে এটি টাই করতে পারেন। অবশেষে আপনার স্ক্রিপ্টটি ওপেন করুন ঠিক যেমন আপনি এটি টার্মিনালের মধ্যে সম্পাদন করবেন! আপনার BASH ফাইলে আপনার সংরক্ষণ করে এবং সেটআপে 5 সেকেন্ড সময় লাগে।

আশা করি এটি কারও সাহায্য করেছে।


-1

প্রাচীন প্রশ্ন, কিন্তু একটি নিরবধি।

আমি যে সমাধানটি ধারাবাহিকভাবে দেখেছি তা হ'ল একটি $HOME/binডিরেক্টরি রাখা এবং এটি প্রথমে স্থাপন করা $PATH( ~/.bashrcএটি যদি ইতিমধ্যে না থাকে তবে; কিছু সিস্টেমে ডিফল্টরূপে ~/binপ্রথমে থাকে $PATH)। এক্সিকিউট করার জন্য স্ক্রিপ্টগুলি সেখানে ফেলে দেওয়া বা স্ক্রিপ্ট / এক্সিকিউটেবলের অন্য জায়গায় সিমলিংকগুলি হ'ল পাথ সমস্যাগুলি মোকাবেলা করার সহজ উপায় যা সিস্টেম বা অন্যান্য ব্যবহারকারীকে প্রভাবিত করে না।

যদি কোনও স্ক্রিপ্টে অতিরিক্ত সংস্থান প্রয়োজন হয় যা তার নিজের অবস্থানের সাথে সম্পর্কিত হতে পারে (অস্বাভাবিক নয়) তবে এনভ্বর $BASH_SOURCEব্যবহার করা হবে। $BASH_SOURCEএর মান নির্বিশেষে সর্বদা চলমান স্ক্রিপ্টের পরম পথ থাকে $PWD

নিম্নোক্ত বিবেচনা কর:

ceverett@burrito:~$ echo $PATH
/home/ceverett/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

সুতরাং আমরা দেখতে পাচ্ছি যে $HOME/binএটি প্রথমে রয়েছে $PATH, তাই যা আমি রেখেছি ~/binতা চলবে। আমার কাছে একটি প্রদর্শিত স্ক্রিপ্ট রয়েছে ~/bin/findme:

#!/bin/bash

echo "Running from $BASH_SOURCE"

এটি চলমান স্ক্রিপ্টের অবস্থানের নিখুঁত পথ পেতে ব্যবহার করা যেতে পারে।

ceverett@burrito:~$ findme
Running from /home/ceverett/bin/findme
ceverett@burrito:~$ cd foo
ceverett@burrito:~/foo$ findme
Running from /home/ceverett/bin/findme
ceverett@burrito:~/foo$ cd /
ceverett@burrito:/$ findme
Running from /home/ceverett/bin/findme

(1) এটি দরকারী তথ্য হিসাবে উপস্থিত বলে মনে হলেও, প্রশ্নটি জিজ্ঞাসা করল না যে কীভাবে স্ক্রিপ্টগুলি তাদের নিজের অবস্থানের সাথে সম্পদ ব্যবহার করে লিখতে হয়; এটি স্ক্রিপ্ট চলমান সম্পর্কে জিজ্ঞাসা করেছে। (২) আমি নিশ্চিত না যে আপনার দ্বিতীয় অনুচ্ছেদটি প্রশ্নটিকে কীভাবে সম্বোধন করে। আপনি কি পরামর্শ দিচ্ছেন যে, আমি যদি কোনও স্ক্রিপ্ট লিখি এবং ডেসমন্ড এটি চালাতে চায় তবে তার উচিত এটি নিজের ব্যক্তিগত binডিরেক্টরিতে লিঙ্ক করা উচিত ? বোঝা লাগে। (3) এছাড়াও, এটি অবস্থানের স্বাধীনতা ভঙ্গ করে। যদি /home/desmond/bin/fooআমার স্ক্রিপ্টের লিঙ্ক হয়, তবে BASH_SOURCEতা হবে /home/desmond/bin/fooএবং স্ক্রিপ্টটি এর সংস্থানগুলি সন্ধান করতে সক্ষম হবে না।
জি-ম্যান বলছেন 'পুনরায় ইনস্টল করুন মনিকা'

@ জি-ম্যান (1) ব্যবহারকারী খুব বেশি প্রসঙ্গ সরবরাহ করেন নি। গত 30 বছর ধরে যখনই এই প্রশ্নটি আমার সম্পর্কে জিজ্ঞাসা করা হয়েছে তখনই এটি সর্বদা প্রেক্ষাপটে একটি ব্যবহারকারী (সাধারণত একটি নতুন সিসপ বা বিকাশকারী) তুচ্ছ কাজগুলি স্বয়ংক্রিয় করতে নিজের এবং অন্যান্য অধিগ্রহণকৃত স্ক্রিপ্টগুলির মিশ্রণ চালায়, তাই আমি এটার উত্তর দিয়েছি উপায়। এই করে ব্যবহারকারী চাওয়ার পক্ষ থেকে স্ক্রিপ্টিং জ্ঞান একটি বিট অনুমান। (২) সিস্টেম-প্রশস্ত স্ক্রিপ্টগুলি সাধারণত ইনস্টল থাকে /binবা এর মধ্যে একটি পরিচিত অবস্থানে রয়েছে /opt। (3) অবস্থানের স্বাধীনতা হ'ল ব্যক্তিগত স্ক্রিপ্টগুলির অন্তর্নির্ভর সংগ্রহ লেখার সময় এটি সংরক্ষণ করে।
zxq9
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.