Şimdiye kadar verilen tüm cevaplar cmd3
ile değiştirin cat
. Ayrıca herhangi bir komutu çalıştırmaktan da kaçınabilirsiniz:
if [ -n "$DEFINE" ]; then
alias maybe_cmd3='cmd3 |'
else
alias maybe_cmd3=''
fi
cmd1 |
cmd2 |
maybe_cmd3
cmd4 |
... |
cmdN > result.txt
Bu POSIX’dir, ancak modda olmayan bir bash
komut dosyasında (ile başlayan bir komut dosyasında olduğu gibi ), takma adın genişletilmesini (veya ) ile etkinleştirmeniz gerekeceğini unutmayın .bash
sh
#! /path/to/bash
shopt -s expand_aliases
set -o posix
Gereksiz bir komutu hala çalıştırmayan bir başka yaklaşım ise eval 'u kullanmaktır:
if [ -n "$DEFINE" ]; then
maybe_cmd3='cmd3 |'
else
maybe_cmd3=''
fi
eval "
cmd1 |
cmd2 |
$maybe_cmd3
cmd4 |
... |
cmdN > result.txt"
Veya:
eval "
cmd1 |
cmd2 |
${DEFINE:+cmd3 |}
cmd4 |
... |
cmdN > result.txt"
Linux'ta (en azından) bunun yerine , verileri çekirdekler ve kullanıcı alanı arasında iki kez hareket ettirmekten kaçınan verileri iki boru arasında geçirmek için + yerine kullananları cat
kullanabilirsiniz .pv -q
splice()
read()
write()