Ich möchte die folgende Bash-Funktion so schreiben, dass sie ihre Eingabe entweder von einem Argument oder einer Pipe akzeptiert:
b64decode() {
echo "$1" | base64 --decode; echo
}
Gewünschte Verwendung:
$ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ b64decode < file.txt
$ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
base64
undbash
kann das alles sowieso. Warum eine Funktion schreiben, um die Verwendung der Option-d
oder zu vermeiden--decode
? wenn du wirklich etwas haben musst,b64decode
dannalias b64decode='base64 --decode'
.b64d
wäre allerdings kürzer und würde noch mehr tippen sparen.Antworten:
Sie können verwenden
/dev/stdin
, um von der Standardeingabe zu lesen$# == 0
prüft, ob die Anzahl der Befehlszeilenargumente Null istbase64 --decode <<< "$1"
man kann auch verwendenherestring
anstatt zu verwendenecho
und zu leitenbase64
quelle
echo and pipe
könnte schneller sein .. siehe unix.stackexchange.com/questions/59007/… und es istherestring
, ich habe einen Fehler gemachttr -d "\n"
, um Zeilenumbrüche zu entfernen.ls -l /usr/bin/ | base64 | base64 -d
< /dev/stdin
; Ohne Dateibase64
wird einfach von der Standardeingabe gelesen, die es von seinem übergeordneten Element erbt/dev/stdin
.Die Antwort von Sundeep funktioniert,
base64
da dieses Dienstprogramm nicht mehrere Zeilen unterstützt. Eine allgemeinere Lösung für den allgemeineren Fallist so etwas wie
quelle