Chcę napisać następującą funkcję bash w taki sposób, aby mogła zaakceptować dane wejściowe z argumentu lub potoku:
b64decode() {
echo "$1" | base64 --decode; echo
}
Pożądane użycie:
$ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ b64decode < file.txt
$ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
base64
ibash
może to wszystko zrobić. po co pisać funkcję, aby uniknąć używania opcji-d
lub--decode
? Jeśli naprawdę musi mieć coś, co nazywab64decode
potemalias b64decode='base64 --decode'
.b64d
byłby jednak krótszy i pozwoliłby zaoszczędzić jeszcze więcej pisania.Odpowiedzi:
Możesz użyć
/dev/stdin
do odczytu ze standardowego wejścia$# == 0
sprawdza, czy liczba argumentów wiersza poleceń wynosi zerobase64 --decode <<< "$1"
można również użyćherestring
zamiast używaćecho
i przesyłając dobase64
źródło
echo and pipe
może być szybsze .. patrz unix.stackexchange.com/questions/59007/… i to jestherestring
, popełniłem błądtr -d "\n"
aby usunąć przerwy w linii.ls -l /usr/bin/ | base64 | base64 -d
< /dev/stdin
; bez plikubase64
po prostu odczyta ze standardowego wejścia, które dziedziczy po swoim rodzicu, którym jest/dev/stdin
.Odpowiedź Sundeep działa,
base64
ponieważ to narzędzie nie obsługuje wielu linii. Bardziej ogólna poprawka dla bardziej ogólnego przypadkujest jak
źródło