স্ক্রিপ্টে আর্গুমেন্ট কীভাবে পাস করবেন যা ব্যাশের ইনপুট


10

এই মুহূর্তে আমার কাছে এই জাতীয় ওয়ান-লাইনার রয়েছে:

curl -fsSL http://git.io/vvZMn | bash

এটি স্ক্রিপ্টটি ডাউনলোড করছে এবং স্ট্যাডিন ফাইল হিসাবে এটি ব্যাশ করছে। আমি অতিরিক্ত যুক্তি দিয়ে এই স্ক্রিপ্টটি চালাতে চাই print

এরকম কিছু হতে পারে?

curl -fsSL http://git.io/vvZMn | bash -- print

তবে এটি কাজ করে না।


4
আপনি এখানে কি আশা printকরছেন? কমান্ড গুলো প্রদর্শিত হচ্ছে? যদি তাই হয়, চেষ্টা করুন bash -x। দ্রষ্টব্য: এই curl | bashরুটিনটি একটি বিশাল সুরক্ষা গর্ত; আপনার সার্ভারটি বোমা না দেওয়া পর্যন্ত কী চলবে তা আপনি দেখতে পাবেন না।
স্টিফেন হ্যারিস

উত্তর:


16

আমি বিশ্বাস করি আপনি যা খুঁজছেন তা হ'ল -sবিকল্প। এর সাথে -s, আপনি স্ক্রিপ্টে যুক্তিগুলি পাস করতে পারেন।

একটি উদাহরণস্বরূপ একটি উদাহরণস্বরূপ:

$ echo 'echo 1=$1' | bash -s -- Print
1=Print

এখানে আপনি দেখতে পাবেন যে স্টিডিনে সরবরাহ করা স্ক্রিপ্টটি অবস্থানগত পরামিতি দেওয়া হয় Print। আপনার স্ক্রিপ্টটি একটি -u UUIDযুক্তি নিয়েছে এবং এটিও সমন্বিত হতে পারে:

$ echo 'echo arguments=$*' | bash -s -- -u UUID print
arguments=-u UUID print

সুতরাং, আপনার ক্ষেত্রে:

curl -fsSL http://git.io/vvZMn | bash -s -- print

অথবা,

curl -fsSL http://git.io/vvZMn | bash -s -- -u UUID print

স্টিফেন হ্যারিস যেমন উল্লেখ করেছিলেন, একটি স্ক্রিপ্ট ডাউনলোড করে এটি কার্যকর করা, অদেখা দৃশ্যমান, এটি একটি সুরক্ষার উদ্বেগ।


3

আপনার সিস্টেমে থাকলে /dev/stdinআপনি ব্যবহার করতে পারেন

$ echo 'echo 1=$1' | bash /dev/stdin print
1=print

এটি করবেন না :

$ echo 'echo 1=$1' | bash /dev/stdin -- print
1=--

আপনি যদি ব্যবহার করতে চান তবে --এটি করুন:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.