Semua jawaban yang diberikan sejauh ini diganti cmd3dengan cat. Anda juga dapat menghindari menjalankan perintah apa pun dengan:
if [ -n "$DEFINE" ]; then
alias maybe_cmd3='cmd3 |'
else
alias maybe_cmd3=''
fi
cmd1 |
cmd2 |
maybe_cmd3
cmd4 |
... |
cmdN > result.txt
Itu POSIX, tetapi perhatikan bahwa jika dalam bashskrip bashyang tidak dalam sh-mode (seperti skrip yang dimulai dengan #! /path/to/bash), Anda harus mengaktifkan alias ekspansi dengan shopt -s expand_aliases(atau set -o posix).
Pendekatan lain yang masih tidak menjalankan perintah yang tidak perlu adalah menggunakan eval:
if [ -n "$DEFINE" ]; then
maybe_cmd3='cmd3 |'
else
maybe_cmd3=''
fi
eval "
cmd1 |
cmd2 |
$maybe_cmd3
cmd4 |
... |
cmdN > result.txt"
Atau:
eval "
cmd1 |
cmd2 |
${DEFINE:+cmd3 |}
cmd4 |
... |
cmdN > result.txt"
Di Linux (setidaknya), alih-alih cat, Anda bisa menggunakan pv -qyang menggunakan splice()alih-alih read()+ write()untuk melewatkan data di antara dua pipa yang menghindari data dipindahkan dua kali antara ruang kernel dan pengguna.