উইন্ডোজ এনভায়রনমেন্ট ভেরিয়েবল PATHEXT এর ইউনিক্স সমতুল্য কি আছে?


11

আমি ভাবছি যে উইন্ডোজ এনভায়রনমেন্ট ভেরিয়েবলের জন্য কোনও ইউনিক্স সমতুল্য কিনা PATHEXT

উইন্ডোজ ব্যাকগ্রাউন্ড নেই তাদের জন্য: একটি ফাইল প্রত্যয় যুক্ত করার PATHEXTফলে আমাকে সেমিড.এক্স.এক্সে প্রত্যয়টি টাইপ না করে একটি স্ক্রিপ্ট সম্পাদন করতে দেয়। উদাহরণস্বরূপ, আমার উইন্ডোজ কম্পিউটারে পাঠ্যপথটিতে প্রত্যয় রয়েছে .plএবং আমি যখন cmd.exe এ পার্ল স্ক্রিপ্ট চালাতে চাই, আমি কেবল টাইপ করতে পারি my-scriptএবং এটি কার্যকর হয়। তবুও, অর্ডার ব্যাশ একই স্ক্রিপ্ট চালানোর জন্য, আমার পুরো নাম লিখতে প্রয়োজন: my-script.pl

যেহেতু আমি বর্তমানে উইন্ডোজ এবং ইউনিক্স উভয় ক্ষেত্রেই কাজ করি, আমি প্রায়শই সর্বদা আবার ইউনিক্স বাক্সে গিয়ে প্রত্যয়টি টাইপ করতে ভুলে যাওয়ার ফাঁদে পড়ে যাই।


যদি পাঠ্যপথ থাকে তবে উইন্ডোজ কী করেছিল তা জেনে রাখা আকর্ষণীয় হবে, উদাহরণস্বরূপ, .sh এবং .pl এবং আপনি এতে foo.sh এবং foo.pl সহ একটি ডিরেক্টরিতে 'foo' চালানোর চেষ্টা করেছিলেন।
জেফ শ্যাচলার

তাহলে .shpreceedes .pl, foo.shচালানো হবে। stackoverflow.com/a/7839178/180275
রেনে Nyffenegger

উত্তর:


7

সংক্ষিপ্ত: না

লম্বা: শেল স্ক্রিপ্টগুলির জন্য একটি সম্পূর্ণ ফাইলের নাম প্রয়োজন, তবে আপনার কমান্ডগুলির বিভিন্ন নাম দিয়ে তাদের রেফারেন্স দেওয়ার জন্য আপনি এলিয়াসগুলি সংজ্ঞায়িত করতে পারেন। উদাহরণ স্বরূপ

alias my-script=my-script.pl

12

সহজ সমাধানটি হ'ল কেবলমাত্র আপনার স্ক্রিপ্টগুলির জন্য এক্সটেনশানগুলি ব্যবহার না করা। এগুলি প্রয়োজনীয় নয় এবং কেবলমাত্র আপনাকে স্ক্রিপ্টের ধরণ সনাক্ত করতে পরিবেশন করে তবে কম্পিউটারে নয়। উইন্ডোজ ফাইলের প্রকারটি সনাক্ত করতে এক্সটেনশনগুলি ব্যবহার করার সময়, * নিক্স সিস্টেমগুলি (যেমন খুব অল্প ব্যতিক্রম সহ gzip) ব্যবহার করে না।

নোট করুন বাইনারিগুলির .exe* নিক্সে কোনও এক্সটেনশন নেই , তাদের কেবল ডাকা হয় foo, না foo.exe। সুতরাং, যদি আপনি foo.plহিসাবে এক্সিকিউটেবল হতে চান foo, কেবল fooপ্রথম স্থান হিসাবে ফাইল সংরক্ষণ করুন ।

বিকল্পভাবে, যদি কোনও কারণে আপনার যদি সত্যিই এক্সটেনশানগুলির প্রয়োজন হয় তবে আপনার স্ক্রিপ্টগুলি যে কোনও ডিরেক্টরিতে সংরক্ষণ করুন এবং এটি চালান:

for f in *.*; do ln -s "$f" "${f%%.*}"; done

যে এক্সটেনশনগুলি সহ সমস্ত ফাইল পুনরুক্তি এবং প্রতিটি ফাইলের জন্য হবে foo.extতাদের, একটি লিঙ্ক নামক তৈরি করবে fooযা পয়েন্ট foo.ext। নোট করুন যে আপনার যদি একই নামের সাথে আলাদা আলাদা এক্সটেনশান সহ একাধিক স্ক্রিপ্ট থাকে তবে এটি ব্যর্থ হবে।


7

আপনি যদি সত্যিই এটি করতে চান তবে একটি উপায় আছে। .bashrcআপনার হোম ডিরেক্টরিতে নিম্নলিখিতটি যুক্ত করুন এবং PATHEXTবিস্তৃত বিন্দুর সাহায্যে এক্সটেনশন নামগুলিতে সেট করুন :। (উইন্ডোজ আচরণের সাথে মেলে বিন্দুগুলি অন্তর্ভুক্ত করার পরিবর্তিত)) এটি আপনার নিজের ঝুঁকিতে ব্যবহার করুন।

if declare -f command_not_found_handle >/dev/null; then 
    eval "original_command_not_found_handle() $(declare -f command_not_found_handle|tail -n +2)"
fi
command_not_found_handle(){
    local PATHEXT_EXPANDED i
    IFS=: read -a PATHEXT_EXPANDED<<<"$PATHEXT"
    for i in "${PATHEXT_EXPANDED[@]}"; do
        if type "$1$i" &>/dev/null; then
            "$1$i" "${@:2}"
            return $?
        fi
    done
    if declare -f original_command_not_found_handle >/dev/null; then
        original_command_not_found_handle "$@"
    else
        return 127
    fi
}

এছাড়াও মনে রাখবেন যে কমান্ডের নামটি সম্পূর্ণ করতে আপনি ট্যাবটি ব্যবহার করতে পারেন যদি অন্য কোনও কমান্ডও শুরু হয় না my-script

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