Je veux écrire la fonction bash suivante de manière à ce qu'elle puisse accepter son entrée à partir d'un argument ou d'un tuyau:
b64decode() {
echo "$1" | base64 --decode; echo
}
Utilisation souhaitée:
$ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ b64decode < file.txt
$ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
base64
etbash
peut faire tout cela de toute façon. pourquoi écrire une fonction juste pour éviter d'utiliser l' option-d
ou--decode
? si vous devez vraiment avoir quelque chose appeléb64decode
alorsalias b64decode='base64 --decode'
.b64d
serait plus court, et économiser encore plus de frappe.Réponses:
Vous pouvez utiliser
/dev/stdin
pour lire à partir de l'entrée standard$# == 0
vérifie si le nombre d'arguments de ligne de commande est nulbase64 --decode <<< "$1"
on peut également utiliserherestring
au lieu d'utiliserecho
et de la tuyauterie pourbase64
la source
echo and pipe
pourrait être plus rapide .. voir unix.stackexchange.com/questions/59007/… et c'estherestring
, j'ai fait une erreurtr -d "\n"
pour supprimer les sauts de ligne.ls -l /usr/bin/ | base64 | base64 -d
< /dev/stdin
; sans fichier,base64
lira simplement à partir de l'entrée standard dont il hérite de son parent, qui est/dev/stdin
.La réponse de Sundeep fonctionne
base64
car cet utilitaire ne prend pas en charge plusieurs lignes. Une solution plus générale pour le cas plus généralest quelque chose comme
la source