Quero escrever a seguinte função bash de uma maneira 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
base64
ebash
pode fazer tudo isso de qualquer maneira. por que escrever uma função apenas para evitar o uso da opção-d
ou--decode
? se você realmente deve ter algo chamadob64decode
entãoalias b64decode='base64 --decode'
.b64d
seria mais curto e economizaria ainda mais digitação.Respostas:
Você pode usar
/dev/stdin
para ler da entrada padrão$# == 0
verifica se o número de argumentos da linha de comando é zerobase64 --decode <<< "$1"
também é possível usar emherestring
vez de usarecho
e canalizar parabase64
fonte
echo and pipe
pode ser mais rápido .. ver unix.stackexchange.com/questions/59007/... e éherestring
, eu cometi um errotr -d "\n"
para remover quebras de linha.ls -l /usr/bin/ | base64 | base64 -d
< /dev/stdin
; sem um arquivo,base64
simplesmente lerá a entrada padrão que herda de seu pai, que é/dev/stdin
.A resposta do Sundeep funciona
base64
porque esse utilitário não suporta várias linhas. Uma correção mais geral para o caso mais geralé algo como
fonte