আপনি, বহনযোগ্যভাবে, একটি #!
লাইনে একাধিক যুক্তি রাখতে পারবেন না । এর অর্থ কেবল একটি সম্পূর্ণ পথ এবং একটি তর্ক (যেমন #!/bin/sed -f
বা #!/usr/bin/sed -f
), বা #!/usr/bin/env
দোভাষীটির পক্ষে কোনও যুক্তি।
পোর্টেবল স্ক্রিপ্ট পাওয়ার জন্য একটি কার্যপ্রণালী হ'ল #!/bin/sh
কমান্ড-লাইন আর্গুমেন্ট হিসাবে সেড স্ক্রিপ্টটি পাস করে একটি শেল র্যাপার ব্যবহার করা । নোট করুন যে এটি পসিক্স দ্বারা অনুমোদিত নয় (মাল্টি-নির্দেশনা স্ক্রিপ্টগুলি অবশ্যই -e
বহনযোগ্যতার জন্য প্রতিটি নির্দেশের জন্য পৃথক যুক্তি দিয়ে লিখতে হবে ), তবে এটি অনেকগুলি বাস্তবায়নের সাথে কাজ করে works
#!/bin/sh
exec sed '
s/a/b/
' "$@"
দীর্ঘ স্ক্রিপ্টের জন্য, হেরডোক ব্যবহার করা আরও সুবিধাজনক হতে পারে। হেরডোকের একটি সুবিধা হ'ল আপনার যদি ভিতরে কোনও একক উক্তি উদ্ধৃত করার প্রয়োজন হয় না। একটি বড় ক্ষয়ক্ষতি হ'ল স্ক্রিপ্টটি দুটি স্ট্র্যান্ডিং পরিণতি সহ স্ট্যান্ডার্ড ইনপুট এনে দেওয়া হয়। এর -f /dev/stdin
পরিবর্তে সেডের কিছু সংস্করণ প্রয়োজন -f -
, যা বহনযোগ্যতার জন্য সমস্যা। সবচেয়ে খারাপ, স্ক্রিপ্টটি ফিল্টার হিসাবে কাজ করতে পারে না, কারণ স্ট্যান্ডার্ড ইনপুটটি স্ক্রিপ্ট এবং ডেটা হতে পারে না।
#!/bin/sh
exec sed -f - -- "$@" <<'EOF'
s/a/b/
EOF
হেরডোকের ডাউনসাইডটি একটি দরকারী ব্যবহারের মাধ্যমে প্রতিকার করা যেতে পারে cat
। যেহেতু এটি পুরো স্ক্রিপ্টটি আবার কমান্ড লাইনে ফেলেছে, এটি পসিক্স-কমপ্লায়েন্ট নয়, তবে বাস্তবে বহুলাংশে বহনযোগ্য।
#!/bin/sh
exec sed "$(cat <<'EOF')" -- "$@"
s/a/b/
EOF
আরেকটি কর্মসূচী হ'ল একটি স্ক্রিপ্ট লিখুন যা sh এবং সেড উভয় দিয়ে পার্স করা যায়। এটি বহনযোগ্য, যুক্তিসঙ্গত দক্ষ, কিছুটা কুৎসিত।
#! /bin/sh
b ()
{
x
}
i\
f true; then exec sed -f "$0" "$@"; fi
: ()
# sed script starts here
s/a/b/
ব্যাখ্যা:
- আন্ডার শ: একটি ফাংশন সংজ্ঞায়িত
b
; ফাংশনটি সিনট্যাকটিকভাবে সু-গঠনযুক্ত হওয়াতে বিষয়বস্তুগুলির ততক্ষণ গুরুত্বপূর্ণ নয় (বিশেষত, আপনার খালি ফাংশন থাকতে পারে না)। তারপরে যদি সত্য হয় (যেমন সর্বদা), sed
স্ক্রিপ্টে চালিত করুন।
- অধীন সেড:
()
লেবেলে শাখা , তারপরে কিছু সুসংহত ইনপুট। তারপরে একটি i
কমান্ড, যার কোনও প্রভাব নেই কারণ এটি সর্বদা এড়িয়ে যায়। পরিশেষে ()
লেবেলটি স্ক্রিপ্টের দরকারী অংশ অনুসরণ করে।
- GNU সেড, ব্যাসিবক্স এবং ওপেনবিএসডি এর অধীনে পরীক্ষিত। (আপনি জিএনইউ সেডে সহজ কিছু দিয়ে পালাতে পারেন, তবে ওপেনবিএসডি সেডটি যে অংশগুলি এড়িয়ে যায় সেগুলি সম্পর্কে মজাদার))