파라미터 또는 파이프에서 입력을받는 Bash 기능


10

인수 또는 파이프에서 입력을 받아 들일 수있는 방식으로 다음 bash 함수를 작성하고 싶습니다.

b64decode() {
    echo "$1" | base64 --decode; echo
}

원하는 사용법 :

$ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ b64decode < file.txt
$ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode

2
때 무의미한 기능처럼 보인다 base64bash어쨌든 모든 작업을 수행 할 수 있습니다. -d또는 --decode옵션을 사용하지 않기 위해 함수를 작성하는 이유는 무엇입니까? 정말로 b64decodethen 이라는 것이 있어야합니다 alias b64decode='base64 --decode'. b64d그러나 더 짧아지고 더 많은 타이핑을 저장합니다.
cas

3
당신이 옳습니다. 그러나 이것은 단지 예로서 사용되었습니다.
tyrondis

답변:


16

/dev/stdin표준 입력에서 읽을 수 있습니다

b64decode()
{
    if (( $# == 0 )) ; then
        base64 --decode < /dev/stdin
        echo
    else
        base64 --decode <<< "$1"
        echo
    fi
}
  • $# == 0 명령 줄 인수 수가 0인지 확인
  • base64 --decode <<< "$1"하나 herestring를 사용 echo하고 배관 하는 대신 사용할 수도 있습니다.base64

1
단지 깨끗한 구문은 IMO, echo and pipe볼 .. 빠른 수 있습니다 unix.stackexchange.com/questions/59007/...을 그리고는 herestring내가 실수했다,
Sundeep

2
tr -d "\n"줄 바꿈을 제거하기 위해 입력을 파이프로 연결할 수 있습니다.
Julie Pelletier

3
base64는 여러 입력 라인을 지원합니까? 물론 그렇지 않다면 꽤 쓸모가 없을 것입니다. ls -l /usr/bin/ | base64 | base64 -d
cas

1
btw, +1 귀하의 질문은 훨씬 복잡한 기능을 의미하는 경우에만 의미가있는 질문에 대한 좋은 대답입니다.
cas

4
실제로는 필요하지 않습니다 < /dev/stdin. 파일이 없으면 base64부모로부터 상속받은 표준 입력 인을 읽습니다 /dev/stdin.
chepner

2

Sundeep의 대답base64유틸리티가 여러 줄을 지원하지 않기 때문에 효과가 있습니다. 보다 일반적인 경우에 대한보다 일반적인 수정

같은 것입니다

my_function() {
    if (( ${#} == 0 )) ; then
        while read -r line ; do
            target_utility "${line}"
        done
    else
        target_utility "${@}"
    fi
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.