আমি যখন .shটার্মিনালে ফাইল চালাতে চাই, তখন আমি shতাদের সামনে রাখা দরকার ।
এটি এড়ানোর কোনও উপায় নেই, এবং এভাবে টাইপিং সংরক্ষণ করুন?
আমি যখন .shটার্মিনালে ফাইল চালাতে চাই, তখন আমি shতাদের সামনে রাখা দরকার ।
এটি এড়ানোর কোনও উপায় নেই, এবং এভাবে টাইপিং সংরক্ষণ করুন?
উত্তর:
আপনি যদি শেল থেকে আপনার স্ক্রিপ্টটি চালাচ্ছেন তবে এই উত্তরটিতে #!/bin/shউল্লিখিত শিব্যাংয়ের আসলে আপনার প্রয়োজন নেই - ওএস এক্স সহ আমি যে ইউনিক্স-মতো সিস্টেম ব্যবহার করেছি সেগুলি ডিফল্ট হয়ে যাবে/bin/sh যদি কোনও দোভাষী নির্দিষ্টভাবে নির্দিষ্ট না করা তবে যাবে ( যদিও এটি একটি ভাল ধারণা হিসাবে নন-শেলগুলি আপনি শিবাং না দিলে কীভাবে আপনার স্ক্রিপ্টটি কার্যকর করা যায় তা জানেনা)
.shআপনারও এক্সটেনশনের দরকার নেই । আপনাকে এক্সিকিউটেবল অনুমতিগুলি নির্ধারণ করতে হবে, যেমন
$ chmod +x script.sh
( $এটি শেল প্রম্পট; আমি ইন্টারেক্টিভ শেলকে আপনি যে আদেশ দিয়েছেন তা চিত্রিত করার জন্য এটি ব্যবহার করছি it এটি টাইপ করবেন না!)
যাইহোক, আমি মনে করি আপনার বিভ্রান্তিটি হ'ল এটি হ'ল আপনি একটি স্ক্রিপ্ট তৈরি করেছেন, উদাহরণস্বরূপ script.sh, বর্তমান ডিরেক্টরিতে, এবং কেবল টাইপ করে এটি কার্যকর করার চেষ্টা করছেন script.sh। যেমন
$ cat >script.sh
echo hello, world
^D
$ chmod +x script.sh
$ script.sh
-bash: script.sh: command not found
( ^Dমানে control- D। আপনি ইউনিক্স ব্যবহার করে অনেক লিখিতকরণে এই স্বরলিপিটি খুঁজে পাবেন))
এটা সত্য যে script.shএই ক্ষেত্রে একটি শেল স্ক্রিপ্ট শুধুমাত্র অর্ধেক সমস্যা হয়; আপনার আসল সমস্যাটি হ'ল ডিফল্টরূপে, শেলটি কোনও প্রোগ্রামের জন্য বর্তমান ডিরেক্টরি অনুসন্ধান করবে না। তবে, এটি কাজ করে:
$ sh script.sh
hello, world
কারণ shস্ক্রিপ্টটিকে আর্গুমেন্ট হিসাবে গ্রহণ করছে।
আপনি বর্তমান ডিরেক্টরিতে কোনও চালনাতে chmod +xচান তা উল্লেখ করে আপনি বর্তমান ডিরেক্টরিতে কোনও স্ক্রিপ্ট কার্যকর করতে পারেন - আবার, যে কোনও নির্বাহযোগ্য –, যদি এটি নির্বাহযোগ্য (যেমন ) হিসাবে চিহ্নিত হয়:
$ ./script.sh
hello, world
আপনি স্ক্রিপ্টটিকে একটি ডিরেক্টরিতেও স্থানান্তর করতে পারেন PATH। আমি /usr/local/binযদি আপনার স্ক্রিপ্টটি সিস্টেম-ব্যাপী ব্যবহারের উদ্দেশ্যে বা binআপনার বাড়ির কোনও ডিরেক্টরি যদি স্ক্রিপ্টটি কেবল আপনার জন্য থাকে তবে এই জন্য সুপারিশ করছি। পরেরটির জন্য আপনার নিজের বাড়ির ডিরেক্টরিতে নিম্নলিখিত লাইনগুলি যুক্ত করে $HOME/binআপনার নতুন বিন ডিরেক্টরিতে প্রসারিত আপনার যুক্ত করা দরকার :PATH.profile
PATH=$HOME/bin:$PATH
export PATH
অবশেষে, আপনি যদি চান তবে আপনার নিজের সাথে বর্তমান ডিরেক্টরিটি যুক্ত করতে পারেন, PATHযা আপনাকে কেবলমাত্র script.shকোনও এক্সিকিউটেবল containing অথবা টাইপ করে একটি ডিরেক্টরিতে যেতে দেবে
$ script.sh
এটি কার্যকর করা। তবে, আমি এই অনুশীলনটির প্রস্তাব দিচ্ছি না , কারণ আক্রমণকারী এখন যে এক্সিকিউটেবল স্ক্রিপ্ট (নামকরণ, বলুন ls) আপনি রাখবেন এমন একটি ডিরেক্টরিতে ফেলে দিয়ে নির্বিচারে চালানো চালিয়ে যেতে পারে trick আপনি যদি সত্যিই এটি করতে চান তবে, আপনার নিম্নলিখিতটিতে কেবল যুক্ত করুন .profile:
PATH=.:$PATH
export PATH
slবা llsবা l... অর্থাত, টাইপস। শুধু .বাইরে ছেড়ে দিন $PATH। এছাড়াও, আপনি অবশ্যই আপনার সিস্টেমের প্রত্যেককে বিশ্বাস করতে (বা করা উচিত নয়)। উদাহরণস্বরূপ, আছে কিছু কাজে লাগান যে কিছু ডিরেক্টরির মধ্যে একটি অবাধ ফাইল ড্রপ একটি আক্রমণকারী পারবেন অনুমান করা, কিন্তু তারা প্রয়োজন আপনি থেকে ধাপে ধাপে বৃদ্ধি করার জন্য যে ফাইল চালানো একটি উন্নততর কাজে লাগান (যেমন, ডেটা সংগ্রহ করি ও ফোন বাড়িতে)। গভীরতায় প্রতিরক্ষা!
/tmpবা অন্য কোনও বিশ্ব-লিখনযোগ্য ডিরেক্টরিতে থাকতে পারে।
/tmpইত্যাদি। অঞ্চল নিয়ে আসা।
shস্ক্রিপ্ট ফাইলটি এক্সিকিউটেবল হিসাবে চিহ্নিত করা থাকলে আপনাকে কল করার দরকার নেই । সেক্ষেত্রে আপনি বিদ্যমান শেল থেকে অন্য কোনও কমান্ডের মতো আপনিও এটি আমার নাম বলতে পারবেন।
সম্পূর্ণরূপে যথাযথ হতে, আপনি দুটি জিনিস করতে চাইবেন:
আপনার স্ক্রিপ্টের শীর্ষে একটি শেবাং নির্দেশিকা অন্তর্ভুক্ত করতে আপনার স্ক্রিপ্টটি সম্পাদনা করুন :
#!/bin/sh
... এটি স্ক্রিপ্টটি চালনার জন্য কোন দোভাষীকে ব্যবহার করতে হবে তা শেলকে বলবে; এই ক্ষেত্রে, কার্যকর /bin/sh।
Chmod কমান্ড দিয়ে আপনার দ্বারা স্ক্রিপ্টটি সম্পাদনযোগ্য হিসাবে চিহ্নিত করুন :
chmod u+x scriptname.sh
আপনি একবারে এই দু'টি কাজ করার পরে, আপনার স্ক্রিপ্টের ফাইলের নাম কমান্ড লাইনে টাইপ করে আপনার স্ক্রিপ্টটি চালানো উচিত। আপনি আপনার স্ক্রিপ্টের মতো একই ডিরেক্টরিতে থাকতে হবে, আপনি যদি না আপনার প্যাথ ভেরিয়েবলের সাথে থাকা ফোল্ডার যুক্ত করার অতিরিক্ত পদক্ষেপ গ্রহণ করেন । শেলটি কী স্ক্রিপ্টটি চালায় তা যদি আপনার যত্ন না করে থাকে তবে আপনাকে নির্দিষ্ট করার জন্য প্রথম ধাপের দরকার নেই shতবে সুনির্দিষ্ট হওয়া এবং "শেবাংশ" সেট করা আরও ভাল।
/bin/sh, যদিও তারা ক্ষতি করে না।
kshআমার দিনগুলিতে এইচপি-ইউএক্স-এ অনেকগুলি স্ক্রিপ্ট লিখতাম - তবে এটি জেনে রাখা ভাল যে এটি কঠোরভাবে প্রয়োজনীয় নয়।
execসিস্কেল ব্যবহার করেন তবে আপনি পাবেন ENOEXEC(এক্সিকিউট ফর্ম্যাট ত্রুটি )। এই সম্পর্কে দুঃখিত, @ বিমিক, @ ক্রিসডাব্লু .আর। আমি এখন আমার উত্তর সম্পাদনা করতে যাচ্ছি।