এখনও পর্যন্ত দেওয়া সমস্ত উত্তরগুলি প্রতিস্থাপন cmd3
করে cat
। আপনি এর সাথে কোনও কমান্ড চালানো এড়াতে পারেন:
if [ -n "$DEFINE" ]; then
alias maybe_cmd3='cmd3 |'
else
alias maybe_cmd3=''
fi
cmd1 |
cmd2 |
maybe_cmd3
cmd4 |
... |
cmdN > result.txt
এটি পজিক্স, তবে নোট করুন যে কোনও bash
স্ক্রিপ্টে যেখানে bash
ইন- sh
মোড নেই (যেমন কোনও স্ক্রিপ্ট দিয়ে শুরু হচ্ছে #! /path/to/bash
), আপনাকে shopt -s expand_aliases
(বা set -o posix
) দিয়ে উপন্যাস প্রসারণ সক্ষম করতে হবে ।
আরেকটি পদ্ধতি যা এখনও কোনও অপ্রয়োজনীয় কমান্ড চালায় না তা হল ইওল ব্যবহার:
if [ -n "$DEFINE" ]; then
maybe_cmd3='cmd3 |'
else
maybe_cmd3=''
fi
eval "
cmd1 |
cmd2 |
$maybe_cmd3
cmd4 |
... |
cmdN > result.txt"
বা:
eval "
cmd1 |
cmd2 |
${DEFINE:+cmd3 |}
cmd4 |
... |
cmdN > result.txt"
লিনাক্সে (কমপক্ষে) পরিবর্তে cat
, আপনি দুটি পাইপের মধ্যে ডেটা পাস করার জন্য + এর পরিবর্তে pv -q
কোনটি ব্যবহার করেন যা কার্নেল এবং ব্যবহারকারীর স্পেসের মধ্যে ডেটা দু'বার সরিয়ে নেওয়া এড়ানো যায়।splice()
read()
write()