উবুন্টু: অন্য কমান্ডের আউটপুট চালান


13

আমার কাছে কমান্ড লাইন রয়েছে যা একটি পৃথক কমান্ড লাইন দেয়, উদাহরণস্বরূপ:

> commandlineA param1 param2
  commandlineB param1

আমি একটি একক কমান্ড লাইন কার্যকর করতে চাই যা প্রদত্ত প্যারামিটার (গুলি) দিয়ে কমান্ডলাইনবি চালাবে।

একটি একক কমান্ড লাইন ব্যবহার করে কি করার সহজ উপায় আছে বা আমার একটি ছোট বাশ ফাইল চালানো দরকার যা আউটপুটটিকে ভেরিয়েবলের মধ্যে সঞ্চয় করবে এবং তারপরে এটি চালাবে?

ধন্যবাদ


2
বেশ কিছু সময়ের জন্য অনুসন্ধান করা হয়েছে তবে আমার ধারণা আমার নিজের দ্বারা একটি প্রশ্ন পোস্ট করতে হবে .... $ (কমান্ডলাইনএ পেরাম 1 প্যারাম 2) কাজটি করেছে।
লাইয়ার ওহানা

উত্তর:


17

আপনি নিজেরাই এটি কাজ করেছেন বলে মনে হয় তবে আপনি এটি ব্যবহার করতে পারেন:

$(command parameter1 parameter2)

সম্পাদনার সম্পাদনা: নীচে কিছুটা ভুল, যদিও এটি একটি সাবশেলে কমান্ডটি চালায়, এটি দেখা যায় যে পরিবেশের ভেরিয়েবলগুলি এখনও উপলব্ধ থাকবে। লোককে বিভ্রান্ত করার জন্য দুঃখিত ...

সম্পাদনা করুন: এটি একটি সাব-শেলের মধ্যে চলবে, কোনও অপ্রত্যাশিত পরিবেশের ভেরিয়েবল ব্যবহার করা হবে না। আপনি যদি একই শেলটিতে একটি কমান্ড চালাতে চান তবে আপনার ব্যবহার করতে হবে:

eval $(command parameter1 parameter2)

দেওয়া অন্য উত্তরটি হ'ল বাশ নিজেই পাইপ দেওয়া:

echo 'uname -a' | bash 

এটি আপনাকে একটি একই শেল চালাতে, একটি সাব-শেলের মধ্যেও কার্যকর করা হবে:

echo 'uname -a' | bash -c

ঘটনাচক্রে, আপনি synt () সিনট্যাক্সের পরিবর্তে ব্যাক টিকগুলিও ব্যবহার করতে পারেন, তবে এটি প্রস্তাবিত নয়


(1) "আপনি এটি একটি সাবশেলে চলবে" বলতে আপনার অর্থ কী তা আমি ঠিক জানি না। Unexported এনভায়রনমেন্ট ভেরিয়েবল হবে ব্যবহৃত হবে না। (২) আমি evalএখানে ব্যবহারের কোনও কারণ দেখতে পাচ্ছি না । আপনার যদি কোনও কারণ থাকে তবে দয়া করে এটি ব্যাখ্যা করুন। (3) আপনার শেষ উদাহরণ (সহ  -c) সম্পূর্ণ ভুল।
স্কট

আপনি সঠিক, আমি আবার পরীক্ষা করেছিলাম এবং আমি সেখানে ভুল ছিল। তালিকা হিসাবে চলাকালীন, ব্যাশ শেল কাঁটাচামচ এবং পরিবেশের ভেরিয়েবলগুলি এখনও উপলব্ধ। সুতরাং আপনি সঠিক, যে সম্পর্কে দুঃখিত।
ক্রিস শার্লক

4

এটা ব্যবহার কর:

commandlineA param1 param2 | bash

উদাহরণ:

echo "uname -a" | bash

আউটপুট:

লিনাক্স k1104 2.6.38-8-জেনেরিক # 42-উবুন্টু এসএমপি সোমবার 11 এপ্রিল 03:31:50 ইউটিসি ২০১১ i686 i686 i386 জিএনইউ / লিনাক্স

এটিতে কোনও ভুল নেই, তবে এটি অন্য ব্যাশ শেলটিকে স্প্যান করবে।
ক্রিস শার্লক

সুতরাং$(commandlineA param1 param2)
ট্রিপল

@ ট্রাইলি: আপনি কমলা এবং কুমড়োর সাথে তুলনা করছেন।  printf '\143\144\040\057\n' | bashশেষ পর্যন্ত একটি অপ-বিকল্প, কারণ কমান্ডটি একটি নতুন, পৃথক (এবং ক্ষণস্থায়ী) শেল প্রক্রিয়াতে কার্যকর হয়। বিপরীতে, $(printf '\143\144\040\057\n')বর্তমান, সক্রিয়, ইন্টারেক্টিভ শেল ডিরেক্টরি পরিবর্তন করতে হবে।
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.