কমান্ড আউটপুটকে কীভাবে অন্য কমান্ডের বেশ কয়েকটি আর্গুমেন্ট হিসাবে পাস করতে হয়


13

আমার একটি কমান্ড রয়েছে যা এই জাতীয় ফলাফল দেয়:

/। / কমান্ড 1
শব্দ 1 শব্দ 2 শব্দ 3

আমি এই তিনটি শব্দটিকে অন্য কমান্ডে যুক্তি হিসাবে এইভাবে পাঠাতে চাই:

$ কমান্ড 2 শব্দ 1 শব্দ 2 শব্দ 3

কমান্ড 1 আউটপুটকে তিনটি ভিন্ন আর্গুমেন্ট $ 1 $ 2 $ 3 হিসাবে কমান্ড 2 তে কীভাবে পাস করবেন?

উত্তর:


9

আপনি ব্যবহার করতে পারেন xargs, -tপতাকাটি সহ xargsভার্বোজ হবে এবং এটি কার্যকর করা আদেশগুলি মুদ্রণ করবে:

./command1 | xargs -t -n1 command2

-n1প্রতিটি কলটিতে পাস হওয়া সর্বাধিক তর্কগুলি সংজ্ঞায়িত করে command2। এটি কার্যকর করা হবে:

command2 word1
command2 word2
command2 word3

আপনি যদি সমস্ত কিছু command2ব্যবহারের একটি কল হিসাবে যুক্তি হিসাবে চান তা:

./command1 | xargs -t command2

এটি 3 টি যুক্তি সহ কমান্ড 2 কে কল করে:

command2 word1 word2 word3

কমান্ড 1 এর আউটপুট যদি দীর্ঘ হয় ARG_MAX? আমার একটি দৃশ্যাবলী আছে যেখানে আমি কোনও ফাংশনটিতে কোনও ফাইলের বিষয়বস্তুগুলি দিয়ে যাচ্ছি।
0xc0de

4

আপনি 'কমান্ড সাবস্টিটিউশন' চান, অর্থাত: আনোথারে একটি কমান্ডের এম্বেড আউটপুট

command2 $(command1)

Ditionতিহ্যগতভাবে এটি এ হিসাবে করা যেতে পারে:

command2 `command1`

তবে এই ব্যবহারের সাধারণত প্রস্তাব দেওয়া হয় না, কারণ আপনি এগুলি বাসাতে পারেন না।

উদাহরণ স্বরূপ:

test.sh:
#!/bin/bash
echo a b c

test2.sh

#!/bin/bash
echo $2

ব্যবহার:

./test2.sh $(./test.sh)
b

যদি আমি এটি করি, এটি কমান্ড 1 আউটপুটটিকে একক আর্গুমেন্ট হিসাবে পাস করছে, তিনটি পৃথক নয়: $ কমান্ড 2 $ (বিড়াল আউটপুট_ফর্ম_কম্যান্ড 1)
অ্যাডি

আহ ঠিক আছে, এক সেকেন্ড ... আপনার সেখানে রাখা একটিতে বিটিডব্লু বিড়ালের দরকার নেই।
সাইরেক্স

আমার জন্য কাজ কর. যদি আমার কমান্ড 2 ইকোস $ 2 (i, e: দ্বিতীয় আর্গুমেন্ট) প্রত্যাশিত হিসাবে আমি "word2" পাই।
সাইরেক্স

0

আমি মনে করি এটি আপনাকে সাহায্য করবে

কমান্ড 1 | xargs কমান্ড 2

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