Função Bash que aceita entrada de parâmetro ou pipe

8

Eu quero escrever a seguinte função bash de uma forma que possa aceitar sua entrada de um argumento ou um pipe:

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

Uso desejado:

$ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ b64decode < file.txt
$ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
    
por tyrondis 05.08.2016 / 05:55

1 resposta

11

Você pode usar /dev/stdin para ler da entrada padrão

b64decode()
{
    if (( $# == 0 )) ; then
        base64 --decode < /dev/stdin
        echo
    else
        base64 --decode <<< "$1"
        echo
    fi
}
  • $# == 0 verifica se o número de argumentos da linha de comando é zero
  • base64 --decode <<< "$1" one também pode usar herestring em vez de usar echo e canalizar para base64
por 05.08.2016 / 06:36