এর সামনে "বাশ" টাইপ না করে ব্যাশ স্ক্রিপ্টগুলি চলবে না


11

আমাদের স্কুল সিস্টেমে আমরা টাইপ না করে স্ক্রিপ্ট ফাইল চালাতে সক্ষম হলাম bashবা cshকী স্ক্রিপ্ট টাইপ তা চিহ্নিত না করে আপনার কাছে কী রয়েছে। উবুন্টুতে, তবে, bash script.bashউদাহরণস্বরূপ আমাকে টাইপ করতে হবে । উবুন্টুতে কি এটি সর্বদা প্রয়োজনীয়, বা এটি কোনও পরিবর্তন যা আমি পরিবর্তন করতে পারি?


1
এটি একটি এক্সিকিউটেবল ফাইল হিসাবে সেট করা হয়?
jsolarki

হ্যাঁ, ফাইলটি এক্সিকিউটেবল, তাই আমি মনে করি এটি কেবল নিজেরাই চালানো হবে।
muttley91

1
আপনি ./script টাইপ করলে আপনি কী ত্রুটি পান? আপনি কি নিশ্চিত যে লাইনটির শেষে কোনও অতিরিক্ত চর স্থাপন করে উইন্ডোজ সম্পাদক থেকে স্ক্রিপ্টটি পরিবর্তন করা হয়নি? এটি প্রথম লাইনটি ভেঙে নির্দেশ করবে যে স্ক্রিপ্টটি ব্যাশ দিয়ে কার্যকর করা উচিত।
জোও পিন্টো

1
আপনি এটি কীভাবে শুরু করবেন এবং ত্রুটিযুক্ত সমস্যাটি কী?
ব্যবহারকারী অজানা

.shব্যাশ স্ক্রিপ্টগুলির জন্য ব্যবহার না করার জন্য +1 । যদিও ইউনিক্স ওয়ার্ল্ডে এক্সিকিউটেবল স্ক্রিপ্টগুলির জন্য সাধারণত ফাইল এক্সটেনশনগুলি ব্যবহৃত হয় না।
nyuszika7h

উত্তর:


17
  1. নিশ্চিত করুন যে আপনি স্ক্রিপ্টটি শুরু করেছেন ./scriptবা পুরো পথ বা যা কিছু দিয়ে। শুধু scriptmay কাজ নয় (এটা কাজ করে বর্তমান ডিরেক্টরিতে অবস্থিত $PATHমত, /usr/bin(নিরাপত্তার কারণে, এবং এটি ভালো!)), যেহেতু UNIX সিস্টেমের ক্ষেত্রে এটি আপনার পাথ বর্তমান ডিরেক্টরী আছে একটি অভ্যাস নয়

  2. স্ক্রিপ্টটি নির্বাহযোগ্য কিনা তা নিশ্চিত করুন: উদাহরণস্বরূপ: chmod +x scriptএটি সম্পাদনযোগ্য করে তুলবে।

  3. নিশ্চিত করুন, #!/bin/bashআপনার স্ক্রিপ্টের প্রথম লাইন হিসাবে আপনার আছে । এছাড়াও এটি নিশ্চিত করুন যে এটি কোনও ধরণের উইন্ডোজ সম্পাদক দিয়ে সম্পাদিত হয়নি, কারণ এগুলি প্রায়শই ইওল (লাইনের শেষ) এর "ডস প্রকার" ব্যবহার করে যা ইউনিক্সের থেকে আলাদা হয় (উপরের চেকলিস্টটি যদি ঠিক থাকে তবে আপনি "খারাপ" দোভাষী: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি "বা তাই" এটি / বিন / বাশ হলেও, প্রায়শই কারণ হ'ল প্রিন্টযোগ্য - তাই আপনি সাধারণত এটি দেখতে পাবেন না - the r এর অংশ হিসাবে বিবেচিত হবে দোভাষীর পথ)

অন্যরা ইতিমধ্যে উল্লেখ করেছে: আপনি /bin/bashযদি ব্যাশ বৈশিষ্ট্যগুলি ব্যবহার করেন তবে এটির সাথেও /bin/shসিমলিংকযুক্ত হওয়া জরুরি /bin/bash, তবে এখন এক দিন (এটি আমি যতদূর লক্ষ্য করেছি) এটি সিমলিংকযুক্ত dashযা বাশ সামঞ্জস্যতা সরবরাহ করবে না, কেবল পসিক্স sh। এটি বেশ গুরুত্বপূর্ণ, আমাদের ফার্মে বেশ ব্যয়বহুল সফ্টওয়্যারগুলিরও এই সমস্যা রয়েছে: স্ক্রিপ্টগুলিতে #!/bin/shপ্রথম লাইন থাকে তবে এটি বাশ কার্যকারিতার উপরও নির্ভর করে।


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

তত্ত্ব অনুসারে আপনি বর্তমান চলমান ডিরেক্টরিটিকে PATH ভেরিয়েবলের মধ্যে রাখতে পারেন সুতরাং আপনি "./script" এর পরিবর্তে কেবল "স্ক্রিপ্ট" ব্যবহার করতে পারেন তবে আমি আপনাকে সতর্ক করে দিচ্ছি: UNIX সিস্টেমে এটি আসলে অভ্যাস নয় এবং এটি একটি সুরক্ষা সমস্যা হতে পারে ! এছাড়াও বিদ্যালয়ে এমন জিনিসগুলি এমনভাবে শেখা ভাল নয় যা ইউনিক্স সিস্টেমে কখনও সমাধান হয়নি, তাই আমি এই সমাধানটি এড়াতে পারি ...
এলজিবি

1
বা, বেশিরভাগ ক্ষেত্রে, #!/usr/bin/env bashযা কিছুটা বেশি বহনযোগ্য।
স্পারহক

4

ফাইলটির প্রথম লাইনটি পড়েছে তা নিশ্চিত করুন:

#!/bin/bash

শেবাং যদি হয় তবে #!/bin/shআপনার কোনও ব্যাশ-নির্দিষ্ট বৈশিষ্ট্য ব্যবহার করা উচিত নয়, কেবলমাত্র পসিক্স বৈশিষ্ট্য। এমনকি যদি /bin/shএটির একটি সিমিলিংক হয় তবে bashsh হিসাবে চালিত হওয়ার সাথে ব্যাশ একটি POSIX সামঞ্জস্য মোডে চলবে, কিছু (তবে সমস্ত নয়) ব্যাশ বৈশিষ্ট্যগুলি অক্ষম করে।

অবশ্যই আপনাকে অবশ্যই স্ক্রিপ্টটি সম্পাদনযোগ্য কিনা তাও নিশ্চিত করতে হবে।


না, আমি এটিকে যাইহোক অভ্যাসের বাইরে বাশতে সেট করেছি।
muttley91

0

একটি বিকল্প, দৃ strongly়ভাবে নিরুৎসাহিত উপায় যুক্ত .হচ্ছে PATH

PATH=".:$PATH"

অথবা

PATH="$PATH:."

এই পদ্ধতির সাথে সমস্যাটি হ'ল পূর্ববর্তী ক্ষেত্রে যে কোনও সিস্টেম কমান্ড বর্তমান ডিরেক্টরি থেকে এক্সিকিউটেবলের সাথে ওভাররাইড করা যেতে পারে এবং পরবর্তী ক্ষেত্রে অজানা কমান্ডগুলি এখনও ওভাররাইড করা যেতে পারে।

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

ফাইল: ls

#!/bin/bash

./my_malicious_script &>/dev/null
/bin/ls "$@"

সম্ভবত খুব বেশি দেরি না হওয়া অবধি আপনি খেয়াল করবেন না।


1
শব্দ পছন্দটি এখানে কিছুটা বিভ্রান্তিকর। আদেশগুলি ওভাররাইড করা হবে না। আপনি বর্তমান পরিশ্রমী ডিরেক্টরির মধ্যে কমান্ড সিস্টেম ডিরেক্টরি এক জীবন্ত হিসেবে নাম একই ঘটবে থাকে, তাহলে বলতে echoউদাহরণস্বরূপ, আপনার ডিরেক্টরির মধ্যে কেবল এক ব্যবহার করা হবে কারণ যে ডিরেক্টরির মধ্যে সেট করা হয় PATHআগে পরিবর্তনশীল /bin। শেলটি কেবল তাদের ক্রম অনুসারে নির্দিষ্ট ডিরেক্টরিগুলিতে কমান্ড সন্ধান করে PATHএবং কোনও কিছুই ওভাররাইড / ধ্বংস করে না। তবে হ্যাঁ, এর অন্তর্নিহিত রয়েছে
সের্গেই কলডিয়াজন্য
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.