Quiero escribir la siguiente función bash de manera que pueda aceptar su entrada desde un argumento o una tubería:
b64decode() {
echo "$1" | base64 --decode; echo
}
Uso deseado:
$ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ b64decode < file.txt
$ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode

base64ybashpuede hacer todo eso de todos modos. ¿Por qué escribir una función solo para evitar usar la opción-do--decode? si realmente debes tener algo llamadob64decodeentoncesalias b64decode='base64 --decode'.b64dSin embargo, sería más corto y ahorraría aún más tipeo.Respuestas:
Puede usar
/dev/stdinpara leer desde la entrada estándar$# == 0comprueba si el número de argumentos de la línea de comando es cerobase64 --decode <<< "$1"también se puede usar enherestringlugar de usarechoy canalizarbase64fuente
echo and pipepodría ser más rápido ... ver unix.stackexchange.com/questions/59007/… y esherestring, cometí un errortr -d "\n"para eliminar saltos de línea.ls -l /usr/bin/ | base64 | base64 -d< /dev/stdin; sin un archivo,base64simplemente leerá de la entrada estándar que hereda de su padre, que es/dev/stdin.La respuesta de Sundeep funciona
base64porque esa utilidad no admite múltiples líneas. Una solución más general para el caso más general.es algo como
fuente