একটি রান রানযোগ্য ফাইল চালানোর জন্য কেন ./ দরকার?


9

আমি উবুন্টু ব্যবহার করছি এবং আমি লক্ষ্য করেছি যে আমার চালিতযোগ্য স্ক্রিপ্টগুলি চালিত হতে পারে না যদি না আমি থিমটি পূর্ববর্তী না করে ./

উদাহরণস্বরূপ, যদি আমার কাছে পার্ল স্ক্রিপ্ট থাকে: /home/me/script.plএবং আমি বর্তমানে আছি /home/me, টাইপিং এটি script.plকরবে না, তবে ./script.plকরবে।

কেন এমন?


@David বি runnable file => executable file?
লেজার

উত্তর:


13

একটি স্ক্রিপ্ট কার্যকর করতে, আপনার স্ক্রিপ্টের পুরো পথটি টাইপ করতে হবে যদি না স্ক্রিপ্টটি আপনার $PATHপরিবেশের ভেরিয়েবলের তালিকাভুক্ত ডিরেক্টরিগুলির মধ্যে উপস্থিত থাকে । সাধারণত (এবং ডিফল্ট অনুসারে) .(বর্তমান ডিরেক্টরি) নয় আপনার $PATH, তাই আপনি টাইপ করতে হবে ./scriptএটি চালানো।


21

কারণ বর্তমান ডিরেক্টরি আপনার পথে নেই। এটি একটি নিরাপত্তা বৈশিষ্ট্য। যদি এটি আপনার পথে থাকে তবে কেউ সম্ভাব্যভাবে একটি সাধারণ কমান্ডের দূষিত অনুলিপিটি ফেলে দিতে পারে এবং উদাহরণস্বরূপ, আপনি প্রকৃত sudo চালানোর পরিবর্তে সেই ডিরেক্টরিতে থাকলে, আপনি নকলটি চালাবেন। এটি একটি খারাপ জিনিস হতে চাই।


3
এটি কিছুটা বিভ্রান্তিকর। যতক্ষণ .পরে ছিল /usr/bin/, এটি আসলটিকে ছাড়বে না sudo। এটি আপনার পথে দুর্ঘটনাক্রমে প্রোগ্রামগুলি যুক্ত করবেন না তা নিশ্চিত করা, তবে এটি মূলত বিদ্যমান বিদ্যমানগুলিকে ছাড়িয়ে যাওয়ার বিষয়ে নয়।
ম্যাথু ফ্ল্যাশেন

পরিবর্তে sudo, আমি lsএবং ব্যবহার করব rm। ডাকা হওয়ার সম্ভাবনা অনেক বেশি।
অ্যারন দিগুল্লা 4'10

@ অ্যারন: নিশ্চিত তবে lsআপনার পাসওয়ার্ড জিজ্ঞাসা করবে না এবং যদি ব্যবহারকারী sudoপাসওয়ার্ডটি ব্যবহার করতে পারে তবে তা আকর্ষণীয় ...;)
লরেন্ট

1
@Matthew। হ্যাঁ, এটি এখনও ব্যবহার করা শক্ত কিন্তু সত্যিকারের ঝুঁকিপূর্ণ। বলি যে আমি এমন স্ক্রিপ্টে রেখেছি slযা খারাপ কাজ করে, তারপরে অনুরোধ জানায় ls, তারপরে নিজেকে মুছে দেয়। আপনি সিস্টেম সরঞ্জামগুলিকে ওভাররাইড করতে পারবেন না, তবে আপনি 'টাইপসকোয়্যাট' করতে পারেন
রিচ

@laurent কি আমি মন ছিল ছিল: cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@"। পাসওয়ার্ড জানার দরকার নেই।
অ্যারোন দিগুল্লা

4
echo $PATH

এটি কাজ করার জন্য আপনার পথে আপনার অবশ্যই বর্তমান ডিরেক্টরি (একটি বিন্দু) থাকতে হবে।

আপনি যদি নিম্নলিখিত আদেশগুলি দিয়ে চান তবে এটি আপনার পথে যোগ করতে পারেন।

SH / ব্যাশ: export PATH=$PATH:.

tcsh শেল / csh এর মূল: set PATH = ($PATH .)


3

শেল এক্সিকিউটেবলের জন্য পাথ সন্ধান করে এবং ডিফল্টরূপে ./সেই পথে নেই।

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