এটি সবচেয়ে নিরাপদ সংস্করণ বলে মনে হচ্ছে।
tr '[\n]' '[\0]' < a.txt | xargs -r0 /bin/bash -c 'command1 "$@"; command2 "$@";' ''
( -0
মুছে যাবে এবং tr
একটি পুনঃচালনা দিয়ে প্রতিস্থাপিত (অথবা ফাইলটি একটি নাল সঙ্গে প্রতিস্থাপিত হতে পারে পরিবর্তে ফাইল পৃথকীকৃত)। এটি সেখানে প্রধানত যেহেতু আমি প্রধানত ব্যবহার xargs
সঙ্গে find
সঙ্গে -print0
আউটপুট) (এটাও প্রাসঙ্গিক হতে পারে xargs
ছাড়া সংস্করণ -0
সম্প্রসারণ)
এটি নিরাপদ, যেহেতু আরোগুলি সম্পাদন করার সময় শেলকে পরামিতিগুলি অ্যারে হিসাবে পাস করবে। শেলটি (কমপক্ষে bash
) এরপরে এগুলি একটি অপরিবর্তিত অ্যারে হিসাবে অন্য প্রসেসে প্রেরণ করত যখন সমস্ত ব্যবহার করে প্রাপ্ত হয়["$@"][1]
আপনি যদি ব্যবহার ...| xargs -r0 -I{} bash -c 'f="{}"; command "$f";' ''
করেন তবে স্ট্রিংয়ে ডাবল কোট রয়েছে যদি অ্যাসাইনমেন্ট ব্যর্থ হবে। এই ব্যবহার যে বৈকল্পিক জন্য সত্য -i
বা -I
। (এটি একটি স্ট্রিংয়ে প্রতিস্থাপনের কারণে, আপনি সর্বদা ইনপুট ডেটাতে অপ্রত্যাশিত অক্ষর (যেমন উদ্ধৃতি, ব্যাকটিকস বা ডলার চিহ্ন) সন্নিবেশ করে কমান্ডগুলি ইনজেক্ট করতে পারেন)
যদি আদেশগুলি একবারে কেবলমাত্র একটি প্যারামিটার নিতে পারে:
tr '[\n]' '[\0]' < a.txt | xargs -r0 -n1 /bin/bash -c 'command1 "$@"; command2 "$@";' ''
বা কিছুটা কম প্রক্রিয়া সহ:
tr '[\n]' '[\0]' < a.txt | xargs -r0 /bin/bash -c 'for f in "$@"; do command1 "$f"; command2 "$f"; done;' ''
এক্সটেনশনের xargs
সাথে আপনার যদি জিএনইউ বা অন্য থাকে -P
এবং আপনি সমান্তরালভাবে 32 টি প্রক্রিয়া চালাতে চান, প্রতিটি কমান্ডের জন্য 10 টির বেশি নয় তবে প্রতিটি:
tr '[\n]' '[\0]' < a.txt | xargs -r0 -n10 -P32 /bin/bash -c 'command1 "$@"; command2 "$@";' ''
ইনপুটটিতে কোনও বিশেষ অক্ষরের বিপরীতে এটি দৃ rob় হওয়া উচিত। (যদি ইনপুট নাল পৃথক করা হয়।) tr
কিছু লাইনে নিউলাইন থাকলে সংস্করণটি কিছু অবৈধ ইনপুট পাবে, তবে এটি একটি নিউলাইন পৃথক ফাইলের সাথে অনিবার্য।
প্রথম ফাঁকা প্যারামিটারটি এর bash -c
কারণে: ( bash
ম্যান পেজ থেকে ) (ধন্যবাদ @ ক্ল্যাক)
-c If the -c option is present, then commands are read from the first non-option argument com‐
mand_string. If there are arguments after the command_string, the first argument is assigned to $0
and any remaining arguments are assigned to the positional parameters. The assignment to $0 sets
the name of the shell, which is used in warning and error messages.