지금까지 제공된 모든 답변은로 대체 cmd3
됩니다 cat
. 다음을 사용하여 명령을 실행하지 않아도됩니다.
if [ -n "$DEFINE" ]; then
alias maybe_cmd3='cmd3 |'
else
alias maybe_cmd3=''
fi
cmd1 |
cmd2 |
maybe_cmd3
cmd4 |
... |
cmdN > result.txt
POSIX이지만 모드 가 아닌 bash
스크립트 (예 :로 시작하는 스크립트 )에서는 (또는 ) 를 사용하여 별칭 확장을 활성화해야합니다 .bash
sh
#! /path/to/bash
shopt -s expand_aliases
set -o posix
여전히 불필요한 명령을 실행하지 않는 또 다른 방법은 eval을 사용하는 것입니다.
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"
Linux에서 (적어도) 대신에 cat
, 당신이 사용할 수있는 pv -q
사용하는 splice()
대신 read()
+ write()
데이터가 커널과 사용자 공간 사이에 두 번 이동 가진 피한다 두 파이프 사이에 걸쳐 데이터를 전달 할 수 있습니다.