Saya ingin menulis fungsi bash berikut dengan cara yang dapat menerima inputnya dari argumen atau pipa:
b64decode() {
echo "$1" | base64 --decode; echo
}
Penggunaan yang diinginkan:
$ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ b64decode < file.txt
$ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
base64
danbash
bisa melakukan semua itu. mengapa menulis fungsi hanya untuk menghindari penggunaan opsi-d
atau--decode
? jika Anda benar-benar harus memiliki sesuatu yang disebutb64decode
itualias b64decode='base64 --decode'
.b64d
akan lebih pendek, dan menyimpan lebih banyak mengetik.Jawaban:
Anda dapat menggunakannya
/dev/stdin
untuk membaca dari input standar$# == 0
memeriksa apakah jumlah argumen baris perintah adalah nolbase64 --decode <<< "$1"
Anda juga bisa menggunakanherestring
alih-alih menggunakanecho
dan mengirim pipa kebase64
sumber
echo and pipe
mungkin lebih cepat .. lihat unix.stackexchange.com/questions/59007/… dan ituherestring
, saya membuat kesalahantr -d "\n"
untuk menghapus garis putus.ls -l /usr/bin/ | base64 | base64 -d
< /dev/stdin
; tanpa file,base64
hanya akan membaca dari input standar yang diwarisi dari induknya, yaitu/dev/stdin
.Jawaban Sundeep berfungsi
base64
karena utilitas itu tidak mendukung banyak baris. Perbaikan yang lebih umum untuk kasus yang lebih umumadalah sesuatu seperti
sumber