ভিন্ন পরামিতি সহ একই কমান্ডটি পুনরায় চালিত করা হচ্ছে


13

আমি জানি যে আমি নিম্নলিখিত কমান্ডটি চালাতে পারি

ls Some{File,Folder}

এবং এটি এটি চালানোর সমতুল্য:

ls SomeFile SomeFolder

(আমি এটির মতো জিনিসের জন্যও এটি প্রচুর ব্যবহার করি mv place_{a,b})

তবে আমি ভাবছিলাম যে এখানে কোনও আলাদা শর্টকাট ছিল যেখানে আমি এই জাতীয় কিছু করতে পারি:

run-command --a --whole --lot --of --flags parameter a; \
     run-command --a --whole --lot --of --flags parameter b

এবং আমি কেবল টাইপ run-command --a --whole --lot --of --flags parameter {a,b}বা অনুরূপ কিছু ছিল ।


এটি নির্ভর করে run-command, অনেকগুলি ইউনিক্স কমান্ড ক্রমানুসারে কয়েকটি ফাইল আর্গুমেন্ট পরিচালনা করে।
ভোনব্র্যান্ড

উত্তর:


13

ধরে নিচ্ছেন যে আপনি জিএনইউ bashবা অন্য কিছু অনুরূপ ব্যবহার করছেন :

সম্ভবত একটি forলুপ?

for x in a b
do
    run-command --a --whole --lot --of --flags parameter $x
done

যা এক লাইনেও লেখা যেতে পারে for x in a b; do run-command --a --whole --lot --of --flags parameter $x ; done


1
অথবা আপনার যদি চালানোর প্রচুর for x in {a..z}; do ; run-command --a --whole --lot --of --flags parameter $x ; done
পরিমাণ থাকে তবে আপনি ব্যাশের প্রসারণটি এর

সেখানে যা যায় তা বিভিন্ন উপায়ে উত্পন্ন স্থানের তালিকা থেকে পৃথক থাকতে পারে । তাই হ্যাঁ, {a..z}, *.pdf, $(find ...)...
njsg

আমি জানি না কেন আমার মন লুপসে উঠল না। ধন্যবাদ! এটি সম্ভবত আমি ব্যবহার করব। ফাংশন ধারণাটি ভাল, তবে আমি এটি আরও ভাল পছন্দ করি।
আশাই

1
ওয়ান-লাইনার কেবলমাত্র ;নিম্নলিখিত doশব্দটি মুছে ফেলার পরে আমার পক্ষে কাজ করেছিল ।
জিম্প

@ জিমপ ধন্যবাদ, আমি এটিকে সরাতে কোড পরিবর্তন করেছি ;
এনজেএসজি

5

আপনি যদি এটি স্ক্রিপ্ট না করে থাকেন এবং কেবল একটি কমান্ড লাইনে এটি সহজে চালাতে চান, xargsসম্ভবত আপনি যা সন্ধান করছেন সেই আদেশটি।

xargs স্ট্যান্ডার্ড ইনপুট থেকে একগুচ্ছ বিষয়বস্তু নেবে এবং কোনও কমান্ডের জন্য এটি আর্গুমেন্ট হিসাবে ব্যবহার করবে, প্রয়োজনে সেই কমান্ডটি একাধিকবার চালাবে।

নিম্নলিখিত চেষ্টা করুন:

echo parameter a,parameter b | xargs -n 1 -d , run-command --a --whole --lot --of --flags

এই উদাহরণস্বরূপ, আপনি কেবল xargs আপনি যে চালনাটি চালাতে চান তা দিচ্ছেন।

রান-প্রতি আর্গুমেন্টের 1 টি ব্যবহার করতে xargs বলতে "-n 1" পতাকাটি।

"-D," পতাকাটি আর্গুমেন্টগুলি চালানোর জন্য ডিলিমিনেটর হিসাবে ইনপুটটিতে একটি "," সন্ধান করতে xargs কে বলে। (দ্রষ্টব্য যে এতে যদি একটি "," যুক্তি থাকে তবে আপনাকে এটি অন্য কিছুতে পরিবর্তন করতে হবে your যদি আপনার যুক্তিগুলির কোনও ফাঁক না থাকে আপনি এই পতাকাটি পুরোপুরি বাদ দিতে পারেন can

দেখুন man xargsআরও তথ্যের জন্য।


4

আপনি এমন একটি ফাংশনও ব্যবহার করতে পারেন, যা আপনাকে শেষে আপনার পরিবর্তনের যুক্তি সীমাবদ্ধ করে না:

runcom() { run-command --a --whole --lot --of --flags parameter "$1" ; }

runcom a
runcom b

2

আপনি পূর্ববর্তী কমান্ডে বিকল্পগুলি সম্পাদন করতে পারেন। এটি আপনার {a, b} উদাহরণের সাথে কাজ করবে না, কারণ 'ক' এর সমস্ত দৃষ্টান্ত একটি 'বি' দিয়ে প্রতিস্থাপন করা হবে। তবে আপনি নিম্নলিখিত কমান্ডগুলি কার্যকর করতে চান তা কল্পনা করুন:

run-command --a --whole --lot --of --parameter --format xml
run-command --a --whole --lot --of --parameter --format son

আপনি এটি দিয়ে করতে পারেন

run-command --a --whole --lot --of --parameter --format xml
!!:s/xml/json/

ব্যাশ প্রতিস্থাপনটি করবে এবং চালাবে

run-command --a --whole --lot --of --parameter --format json

একমাত্র নয়, বেশ কয়েকটি প্রতিস্থাপন সম্পাদন করতে জিএস (গ্লোবাল প্রতিস্থাপন) ব্যবহার করুন।


1

নেই aliasব্যাশ মধ্যে কমান্ড প্রয়োগ করুন:

$ alias shotcommand='run-command --a --whole --lot --of --flags parameter'

ব্যবহারটি হ'ল: $ shotcommand a



2
এই সমাধানটি কেবল তখনই কাজ করে যদি আমার পরিবর্তিত প্যারামিটারটি সর্বশেষ হয়, তাই না?
আশেশ

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