파이프를 통해 일련의 명령을 실행하는 스크립트가 있습니다. 스크립트에 전달된 매개변수를 기반으로 합니다.
- 파일을 암호화하고 해시를 계산한 후 REST 서비스로 보냅니다.
- 또는 파일을 압축하고 해시를 계산하여 REST 서비스로 보냅니다.
- 또는 파일을 읽고 해시를 계산한 후 REST 서비스로 보냅니다.
if [ "$encryption" = "GPG" ]; then
gpg2 \
--batch \
--passphrase-file "$keyFile" \
--output - \
--symmetric \
--compress-level "$compressLevel" \
"$filePath" | \
./scripts/sha1.py --store "$sha1Destination" | \
curl --silent -X PUT --limit-rate "$limitRate" "$uri" -F files[]=@-
elif [ "$encryption" = "disabled" ]; then
if [ "$compressLevel" > 0 ]; then
gzip --stdout "$filePath" -"$compressLevel" | \
./scripts/sha1.py --store "$sha1Destination" | \
curl --silent -X PUT --limit-rate "$limitRate" "$uri" -F files[]=@-
else
cat "$filePath" | \
./scripts/sha1.py --store "$sha1Destination" | \
curl --silent -X PUT --limit-rate "$limitRate" "$uri" -F files[]=@-
fi
fi
각 명령 체계의 두 번째와 세 번째 부분은 동일하게 유지됩니다. 첫 번째 부분만 변경되어 각각 gpg2
하나의 경우, gzip
다른 경우, cat
마지막 경우로 변경됩니다.
체인의 두 번째와 세 번째 부분에서 코드가 중복되어 짜증이 납니다.
코드 중복을 제거하는 방법이 있습니까? 즉, 다음을 수행하십시오.
if [ "$encryption" = "GPG" ]; then
...
elif [ "$encryption" = "disabled" ]; then
if [ "$compressLevel" > 0 ]; then
...
else
...
fi
fi
... | \
./scripts/sha1.py --store "$sha1Destination" | \
curl --silent -X PUT --limit-rate "$limitRate" "$uri" -F files[]=@-
답변1
예, 중복 코드를 제거할 수 있습니다. 파이프를 뒤에 놓으면 fi
파이프가 캡처됩니다.모두stmt 의 표준 출력 if
.
이 코드(귀하의 코드와 유사하지만 더 단순화됨)는 요점을 보여줍니다.
if [ "$a" = y ]
then
echo abc1
else
echo abc2
fi | sed 's/abc/ABC/'
두 문의 출력은 파이프라인 echo
에 의해 처리됩니다.sed
예를 들어:
$ a=y; if [ "$a" = y ]; then echo abc1; else echo abc2; fi | sed 's/abc/ABC/'
ABC1
$ a=n; if [ "$a" = y ]; then echo abc1; else echo abc2; fi | sed 's/abc/ABC/'
ABC2