ব্যাকস্ল্যাশ দিয়ে শেল কমান্ড কেন শুরু করবেন?


উত্তর:


200
alias curl='curl --some --default --options'

যদি আপনার কোনও উপাধি থাকে curlএবং আপনি এটি ব্যবহার করতে না চান তবে সামনে একটি ব্যাকস্ল্যাশ রাখলে উপনামটি অক্ষম হয়ে যায় এবং কার্ল বাইনারি সরাসরি চালিত হয়।

নোট করুন যে এটি কেবল ইন্টারেক্টিভ শেলটিতে প্রযোজ্য। এলিয়াসগুলি স্ক্রিপ্টগুলিতে কার্যকর হয় না তাই এটি সেখানে অপ্রয়োজনীয় হবে।


4
shopt -s expand_aliasesউপনামের ব্যবহারের আগে স্ক্রিপ্টগুলিতে এলিয়াস ব্যবহার করা যেতে পারে
অ্যালেক্স

কর্নশেলের @lbaby একই আপনি একটি সম্ভাব্য কমান্ড ওরফে এর সামনে একটি ব্যাকস্ল্যাশ রেখে ডিলিয়াস করেন । কর্নশেলের ক্ষেত্রে এটি খুব সাধারণ বিষয় যখন লোকেরা সংজ্ঞা দেয় তাদের মধ্যে ডিরেক্টরিটির নামের সাথে অনুরোধ জানায় । নোট করুন যে এই ফাংশনের প্রথম লাইনটি `\ সিডি" $ @ "` `
ডেভিড ডব্লিউ।

1
এটি লক্ষণীয় যে \curlকোনও নামের শেল ফাংশন বাইপাস করে না curl। তার জন্য, আপনি ব্যাश অন্তর্নির্মিত কমান্ডটি ব্যবহার করতে পারেন command:command curl ...
কিথ থম্পসন

7
লেখার সহজ- \curl ...command curl ...
সরল

নোট করুন dash(এবং সম্ভবত অন্যান্য শাঁস, যদিও আপনি bashছাড়া সঠিক হয়ে আছেন expand_aliases) স্ক্রিপ্টগুলিতে এলিয়াসগুলি প্রসারিত করে
অ্যাড্রিয়ান গন্টার

163

(বোর্ন / পসিক্স) শেল স্পেসিফিকেশন বলছে যে কমান্ড শব্দের কোনও অক্ষর উদ্ধৃত করা হলে একটি ইন্টারেক্টিভ শেলের মধ্যে আলিফ বিকল্পটি দমন করা হয়। ব্যাকস্ল্যাশ হ'ল এটি করার একটি উপায়, তবে উদ্ধৃত করার জন্য আরও সুপরিচিত উপায় রয়েছে: একক এবং দ্বিগুণ উদ্ধৃতি। নিম্নলিখিত সমস্তগুলি উপন্যাসের বিকল্পটি দমন করবে:

 \curl
 cur\l
 \c\u\r\l
 "c"url
 "curl"
 "c""u""r""l"
 'curl'
 'cu'"rl"

ব্যবহার \curlকরা সর্বাধিক সাধারণ এবং পঠনযোগ্য উপায়। যেহেতু এটি একটি প্রমিত বৈশিষ্ট্য, আপনি এটি বোর্ন-heritageতিহ্য শেলগুলিতে কাজ করার আশা করতে পারেন।

\curlকিছুটা টেক্সের কমান্ডের মতো দেখাচ্ছে, তাই না? :-)


14
\curlএকই নামের একটি বহিরাগত অবস্থানকে বাইপাস করার নির্দিষ্ট কারণ দেওয়ার জন্য +1 ; মনে রাখবেন যে কেবলমাত্র এলিয়াসগুলি এইভাবে বাইপাস করা হয়, শেল ফাংশন নয় ; হয়command curl ... বাইপাস নিশ্চিত ।
mklement0

1
আমি শেষ বাক্যটির বিন্দু দেখতে পাচ্ছি না। উপায় দ্বারা, আপনি শুধুমাত্র বাইপাস উল্লেখ alias লেখা , কিন্তু বাইপাস এছাড়াও করবে উদ্ধৃত যে কোন ধরণের কীওয়ার্ড।
gniourf_gniourf

@ এমকিলেটমেন্ট 0 নিশ্চিত নয় ... এক্স command() { echo "Not command, lol!"; } ; command -V echo ; \command -V echo ; \command command echo "This is command! (masking despair)"প্রিন্ট Not command, lol!3
অ্যাড্রিয়ান গন্টার

3
@ অ্যাড্রিয়ানগ্যান্টার: হ্যাঁ, আপনি যদি command নিজেকে শেল ফাংশন দিয়ে প্রতিস্থাপন করেন তবে আপনি প্রক্রিয়াটিকে পরাস্ত করছেন। তোমার উদাহরণ দেখায় যে, হয় \ বাইপাস না ফাংশন হিসাবে বিবৃত। একটি অ স্ব-পরাজিত উদাহরণ: date() { echo 'not date'; }; date; command date। আপনি দূষিত সম্পর্কে উদ্বিগ্ন হন তাহলে গরমিল সঙ্গে commandদেখতে stackoverflow.com/a/35931876/45375
mklement0

@ mklement0 আমি এগুলি সব বুঝতে পারি, তবে আমার বক্তব্যটি হ'ল যদি কেউ গ্যারান্টি দিতে না পারে যে কোনও অন্য আদেশের নাম একটি ফাংশন হিসাবে উপস্থিত নেই (যেমন, আপনার মৃত্যুর পরিবেশের উপর আপনার নিয়ন্ত্রণের অভাব রয়েছে) তবে তার উপরও নির্ভর করতে পারবেন না commandওভাররাইড না করা। আপনার নিজস্ব লিঙ্ক থেকে:Thus, with no control over the execution environment, you cannot write shell scripts that are fully immune to tampering, unless you know that your code will be executed by dash, ksh, or bash (with the workaround in place)
অ্যাড্রিয়ান গন্তার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.