একক লাইনে একাধিক কমান্ডে আর্গুমেন্ট পাস করা


10

আমি একই লাইনে একক লাইনে একাধিক কমান্ড চালাতে সক্ষম হতে চাই। আমি বর্তমানে এটি করার পদ্ধতিটি হ'ল:

commandA file && commandB file && perl -ne '...' file

আমার অন্ত্র প্রবৃত্তি আমাকে বলে যে কেবল একবার ফাইল নাম যুক্তি সরবরাহ করার একটি উপায় থাকা উচিত এবং এটি একই সাথে xargsবা অনুরূপ কিছু মাধ্যমে উভয় আদেশে পাইপ করা উচিত :

find file | xargs commandA && xargs commandB && xargs perl -ne '...'

যখন আমি এটি চেষ্টা করি, কেবল প্রথম কমান্ডটি চালিত হয়। আমি যা করতে চাই তা কীভাবে অর্জন করতে পারি?

উত্তর:


12

আপনি এর জন্য স্থানীয় পরিবর্তনশীল সংজ্ঞায়িত করতে পারেন:

f=file; commandA $f && commandB $f && ...

এছাড়াও আপনি নির্বাহ করতে পারেন সব নিঃশর্তভাবে (প্রতিস্থাপন &&সঙ্গে ;) অথবা সমান্তরাল (প্রতিস্থাপন &&সঙ্গে &)।

বিকল্প হিসাবে, আপনি পূর্ববর্তী যুক্তিগুলির রেফারেন্সের জন্য শেল ইতিহাসের সম্প্রসারণও ব্যবহার করতে পারেন:

commandA file && commandB !:1 && ...

আমার মনে যা ছিল তা ঠিক নয়, তবে এটি একটি আকর্ষণীয় বিকল্প।
জায়েদ

এই উত্তর দিয়ে কি ভুল?
ক্রিস

এটা সত্যিই দুর্দান্ত! কোনও নতুন পরিবর্তনশীল সংজ্ঞায়িত করার উপায় নেই?
ব্যবহারকারী

@ ব্যবহারকারী, আমি একটি বিকল্প যুক্ত করেছি
ম্যাক্সচলেপজিগ


2

কমান্ড লাইন তৈরি করতে আপনি xargs ব্যবহার করতে পারেন যেমন:

echo file | xargs -i -- echo ls -l {}\; wc -l {}

এটি চালাতে কেবল উপরের দিকে ব্যাশে পাইপ করুন:

echo file | xargs -i -- echo ls -l {}\; wc -l {} | bash

বর্তমান ডিরেক্টরিতে সমস্ত * .c ফাইলের উদাহরণ উদাহরণস্বরূপ প্রসারিত করা ( কোনও শেল ওরফে বিকল্প প্রতিরোধ করতে এখানে ls পলায়ন করা ):

\ls -1 *.c | xargs -i -- echo ls -l {}\; wc -l {} | bash

ডিরেক্টরিতে অন্তর্ভুক্ত সমস্ত ফাইলের একটি তালিকা পেতে এটি ব্যবহার করা হয়েছে যেখানে নামটি "এনামস" এর মতো: find . -name "*enums*" | xargs -i echo -e echo {}\; ls -lh {}\; echo -e '\n\n' | bash
ম্যাট লাচম্যান

1

আমি নিজেই এই জন্য ভোট দেব না। এটি নির্বোধ এবং বিপজ্জনক তবে কেবল এটি করার উপায়গুলির তালিকা করার স্বার্থে রয়েছে:

for cmd in "commandA" "commandB" "perl -ne '...'" ; do eval $cmd file ; done

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