কমান্ডগুলি এবং তাদের বিকল্পগুলির আর্গুমেন্ট হিসাবে los enc সংযুক্তিযুক্ত বন্ধনীগুলির ব্যবহার


11

উদাহরণ

আমি সম্প্রতি জোড়া জোড় বন্ধনী ব্যবহার করার উদাহরণ পেয়েছি {}, খোলার এবং বন্ধ বন্ধনীগুলির মধ্যে কিছুই নেই, কমান্ডের যুক্তি হিসাবে এবং এমনকি তাদের বিকল্পগুলির মধ্যে:

cat foo | xargs -I{} echo {}

find . -size 0 -exec rm -i {} \;

কোনও ডকুমেন্টেশন নেই

আমার সমস্যাটি হ'ল আমি জিএনইউ ব্যাশ ম্যানুয়ালটিতে এমন একটি ডকুমেন্টেশন খুঁজে পাই না যা {}উপরের উদাহরণগুলির মতো এই জাতীয় প্রসঙ্গে ব্যবহারের বর্ণনা দেয় ।

আমি মনে করি না এটি একটি হল প্যারামিটার সম্প্রসারণ , কারণ একটি ডলার চিহ্ন হিসেবে একটি প্যারামিটার সম্প্রসারণ মধ্যে পরিক্ষেপ ধনুর্বন্ধনী আগে বসে আবশ্যক ${}

এটি কোনও ধনুর্বন্ধনী সম্প্রসারণ হতে পারে না , কারণ এটি রূপ নেয় {x..y[..incr]}, কোথায় xএবং yalচ্ছিক নয়।

এটি কোনও কমান্ড গোষ্ঠীকরণও হতে পারে না , কারণ {}আর্গুমেন্ট হিসাবে ব্যবহৃত হয়।

প্রশ্নাবলি

  1. জোড়া লাগানো ধনুর্বন্ধনী এর {}অর্থ কী, সাধারণভাবে, কোনও কমান্ডের পক্ষে যুক্তি হিসাবে যা এটি গ্রহণ করে?

  2. {}আর্গুমেন্ট হিসাবে ব্যবহারের বর্ণনা দেয় এমন একটি ডকুমেন্টেশন কোথায় পাব?


কিছু কমান্ডের এই বিকল্পগুলি রয়েছে {}- এর অর্থ হ'ল কমান্ড targetsসহ এটি ফাইলগুলি findমুছে ফেলা / rmখুঁজে পাওয়া যায়।
Tuyen Pham

উত্তর:


16

এই কোঁকড়ানো ধনুর্বন্ধনী ধনুর্বন্ধক একা বাশ দ্বারা বাকি; এগুলি যথাক্রমে অন্তর্গত findএবং xargsতাদের ম্যান-পৃষ্ঠাগুলিতে বর্ণিত।

man find

-exec হুকুম ;

সম্পাদন কমান্ড ; যদি 0 স্ট্যাটাস ফিরে আসে তবে সত্য true নিম্নলিখিত সমস্ত আর্গুমেন্টগুলি কমান্ডের আর্গুমেন্ট হিসাবে গ্রহণ করা হয় যতক্ষণ না যুক্তিযুক্ত যুক্তি উপস্থিত না ;হয়। স্ট্রিং {}বর্তমান ফাইলের নাম দ্বারা প্রতিস্থাপিত হয় প্রক্রিয়া করা হচ্ছে সর্বত্র কম্যান্ড আর্গুমেন্ট ঘটে, শুধু আর্গুমেন্ট যেখানে এটি একা হয়, কিছু সংস্করণে হিসাবে find। এই দুটি \নির্মাণই শেল দ্বারা প্রসার থেকে রক্ষা পেতে (ক ) বা উদ্ধৃত হওয়া প্রয়োজন হতে পারে । -execবিকল্পের ব্যবহারের উদাহরণগুলির জন্য উদাহরণ বিভাগটি দেখুন । নির্দিষ্ট কমান্ডপ্রতিটি ম্যাচ করা ফাইলের জন্য একবার চালানো হয়। কমান্ডটি শুরু ডিরেক্টরিতে কার্যকর করা হয়। -exec অ্যাকশনটি ব্যবহারের আশেপাশে অনিবার্য সুরক্ষা সমস্যা রয়েছে ; -execdirপরিবর্তে আপনার বিকল্পটি ব্যবহার করা উচিত ।

-exec হুকুম {} +

ক্রমের এই রূপটি নির্বাচিত ফাইলগুলিতে -execনির্দিষ্ট কমান্ডটি চালায় , তবে প্রতিটি নির্বাচিত ফাইলের নাম শেষে অন্তর্ভুক্ত করে কমান্ড লাইনটি নির্মিত হয়; কমান্ডের অনুরোধের মোট সংখ্যা মিলিত ফাইলগুলির সংখ্যার তুলনায় অনেক কম হবে। কমান্ড লাইনটি একইভাবে নির্মিত যা xargsতার কমান্ড লাইনগুলি তৈরি করে। {}কমান্ডের মধ্যে কেবলমাত্র একটি উদাহরণ অনুমোদিত। কমান্ডটি শুরু ডিরেক্টরিতে কার্যকর করা হয়। যদি findকোনও ত্রুটির মুখোমুখি হয়, এটি কখনও কখনও তাত্ক্ষণিকভাবে প্রস্থান করতে পারে, তাই কিছু মুলতুবি কমান্ডগুলি মোটেই চালিত হতে পারে না। এই রূপটি -execসর্বদা সত্য ফিরে আসে।

-execdir হুকুম ;

-execdir হুকুম {} +

পছন্দ করুন -execতবে উল্লিখিত কমান্ডটি মেলে থাকা ফাইল সহ সাব-ডাইরেক্টরি থেকে চালিত হয়, যা সাধারণত আপনি যে ডিরেক্টরিটি সন্ধান শুরু করেছিলেন তা নয়। কমান্ডগুলি চাওয়ার পক্ষে এটি অনেক বেশি নিরাপদ পদ্ধতি, কারণ এটি ম্যাচের ফাইলগুলিতে পাথগুলি সমাধান করার সময় জাতিদের পরিস্থিতি এড়িয়ে চলে। -exec ক্রিয়া হিসাবে , + ফর্মটি -execdir একাধিক ম্যাচ করা ফাইল প্রক্রিয়া করার জন্য একটি কমান্ড লাইন তৈরি করবে, তবে আদেশের যে কোনও অনুরোধ কেবল একই সাব-ডিরেক্টরিতে বিদ্যমান ফাইলগুলি তালিকাভুক্ত করবে। আপনি যদি এই বিকল্পটি ব্যবহার করেন তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনার $PATHপরিবেশের ভেরিয়েবলটি রেফারেন্স দেয় না.; অন্যথায়, আক্রমণকারী কোনও ডিরেক্টরিতে চালিত করবে এমন ডিরেক্টরিতে যথাযথ-নামক একটি ফাইল রেখে তাদের যে কোনও কমান্ড চালাতে পারে -execdir$PATHখালি খালি বা নিরঙ্কুশ ডিরেক্টরি নাম নয় এমন এন্ট্রি থাকাতে এটি একই প্রযোজ্য । যদি findকোনও ত্রুটির মুখোমুখি হয়, এটি কখনও কখনও তাত্ক্ষণিকভাবে প্রস্থান করতে পারে, তাই কিছু মুলতুবি কমান্ডগুলি মোটেই চালিত হতে পারে না। কর্মের ফলাফলের কিনা উপর নির্ভর করে +বা ;বৈকল্পিক ব্যবহৃত হচ্ছে; -execdir কমান্ড {} + সর্বদা সত্য প্রত্যাবর্তন করে, যখন -execdir কমান্ডটি {} ; কেবল সত্যটি প্রদান করে যদি কমান্ড 0 দেয়।

man xargs

-I প্রতিস্থাপন কার্যক্রম

প্রারম্ভিক-আর্গুমেন্টগুলিতে স্ট্যান্ডার্ড ইনপুট থেকে পঠিত নামগুলি সহ প্রতিস্থাপন-স্ট্রিংয়ের ঘটনাগুলি প্রতিস্থাপন করুন। এছাড়াও, অব্যক্ত ফাঁকা স্থানগুলি ইনপুট আইটেমগুলি শেষ করে না; পরিবর্তে বিভাজক হ'ল নতুন লাইন চরিত্র। সূচিত করে -xএবং -L 1

-i[ প্রতিস্থাপন-str ], --replace[ =প্রতিস্থাপন-স্ট্র ]

এই বিকল্পটি -Iপ্রতিস্থাপন-str এর প্রতিশব্দ হয় যদি প্রতিস্থাপন-str নির্দিষ্ট করা থাকে। যদি প্রতিস্থাপন-স্ট্রিং আর্গুমেন্টটি অনুপস্থিত থাকে তবে প্রভাবটি একই রকম হয় -I{}। এই বিকল্পটি হ্রাস করা হয়; -Iপরিবর্তে ব্যবহার করুন।

সম্পাদনা করুন: এবং এখানে বাশ কেন এই কোঁকড়া ধনুর্বন্ধনীগুলি উপেক্ষা করে:

man bash

{ তালিকা; }

তালিকাটি কেবল বর্তমান শেল পরিবেশে কার্যকর করা হয়। তালিকাটি অবশ্যই একটি নতুন লাইন বা সেমিকোলন দিয়ে শেষ করতে হবে। এটি একটি গ্রুপ কমান্ড হিসাবে পরিচিত। রিটার্নের স্থিতি হল তালিকার প্রস্থান স্থিতি। লক্ষ্য করুন metacharacters অসদৃশ ( এবং ) , {} সংরক্ষিত শব্দ এবং ঘটতে হবে যেখানে একটি সংরক্ষিত শব্দ চিনে নিতে দিতে অনুমোদিত হয়। যেহেতু তারা কোনও শব্দের বিরতি সৃষ্টি করে না, তাই তাদের অবশ্যই হোয়াইটস্পেস বা অন্য শেল মেটাচারাক্টারের দ্বারা তালিকা থেকে আলাদা করতে হবে।

জোর দেওয়ার জন্য: তালিকাটি একটি নতুন লাইন বা সেমিকোলন দিয়ে শেষ করতে হবে


1
ধন্যবাদ! আমি বিরক্ত হয়েছি যে, যে কেউ লিখেছেন man xargsতিনি {}আসলে কী বোঝাতে চেয়েছেন তা বোঝাতেও মাথা ঘামান নি বা লেখককে -execম্যান-পেজের ব্যাখ্যাতে পাঠককে পুনর্নির্দেশ করেননি (কোনও শঙ্কিত উদ্দেশ্য নয়) find
নিকো গাম্বট

@NikoGambt - আমি দুঃখে ...
Tink

5
@ নিকোগ্যাম্বট ওয়েল, i x এর সত্যিকার অর্থে xargs এর অর্থ কিছুই নয়, -i এর ডিফল্ট মান হওয়া বাদ দিয়ে যা অবমূল্যায়ন করা হয়। এর বাইরে কী কী ব্যাখ্যা দরকার তা আমি নিশ্চিত নই। আপনি পোস্ট করেছেন উদাহরণে, এটি পাশাপাশি হতে পারে xargs -Iab echo ab; এটি একটি সম্পূর্ণ নির্বিচারে পছন্দ।
র্যান্ডম 832

@ র্যান্ডম 832 আরও কিছু পরীক্ষা করার পরে -I, আমি এখন বুঝতে পারি যে বিকল্পটি আসলে কী করে। হ্যাঁ, {}নির্বিচারে, যেমনটি আপনি বলেছেন। আমি কেবল ব্যাখ্যায় বিভ্রান্ত হয়ে পড়েছিলাম If the replace-str argument is missing, the effect is the same as -I{}। যদি -Iতর্ক ছাড়াই একই রকম হয় -I{}, তবে cat foo | xargs -I echo {}চলমান হিসাবে একই ফলাফল তৈরি করবে cat foo | xargs -I{} echo {}। তবে এগুলি এক নয়। পূর্ববর্তীটি একটি ত্রুটি, এবং যা আমাকে আরও বিভ্রান্ত করেছিল তা ত্রুটি বার্তা ছিল xargs: {}: No such file or directory, তবে এটি কেবল বাস্তবায়নের কারণে।
নিকো গাম্বট

1
@ নিকোগাম্বট -I(বড় হাতের আই) আর্গুমেন্ট ছাড়া চালানো যাবে না । যুক্তি -Iছিল echo। এটির মধ্যে -Iএবং এর মধ্যে প্রাথমিক পার্থক্য -i(এবং কারণটি
-২ হ্রাস করা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.