Semua jawaban yang diberikan sejauh ini diganti cmd3
dengan 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 bash
skrip bash
yang 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 -q
yang menggunakan splice()
alih-alih read()
+ write()
untuk melewatkan data di antara dua pipa yang menghindari data dipindahkan dua kali antara ruang kernel dan pengguna.