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
base64
ybash
puede hacer todo eso de todos modos. ¿Por qué escribir una función solo para evitar usar la opción-d
o--decode
? si realmente debes tener algo llamadob64decode
entoncesalias b64decode='base64 --decode'
.b64d
Sin embargo, sería más corto y ahorraría aún más tipeo.Respuestas:
Puede usar
/dev/stdin
para leer desde la entrada estándar$# == 0
comprueba si el número de argumentos de la línea de comando es cerobase64 --decode <<< "$1"
también se puede usar enherestring
lugar de usarecho
y canalizarbase64
fuente
echo and pipe
podrí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,base64
simplemente leerá de la entrada estándar que hereda de su padre, que es/dev/stdin
.La respuesta de Sundeep funciona
base64
porque esa utilidad no admite múltiples líneas. Una solución más general para el caso más general.es algo como
fuente