Я хочу написать следующую функцию bash таким образом, чтобы она могла принимать входные данные из аргумента или канала:
b64decode() {
echo "$1" | base64 --decode; echo
}
Желаемое использование:
$ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ b64decode < file.txt
$ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ="
$ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
base64
иbash
может делать все это в любом случае. зачем писать функцию просто чтобы не использовать опцию-d
или--decode
? если вам действительно нужно что-то называтьb64decode
тогдаalias b64decode='base64 --decode'
.b64d
будет короче, но и сохранит еще больше печатать.Ответы:
Вы можете использовать
/dev/stdin
для чтения со стандартного ввода$# == 0
проверяет, равно ли число аргументов командной строки нулюbase64 --decode <<< "$1"
можно также использоватьherestring
вместо использованияecho
и трубопроводовbase64
источник
echo and pipe
может быть быстрее .. см. unix.stackexchange.com/questions/59007/… иherestring
я ошибсяtr -d "\n"
чтобы удалить разрывы строк.ls -l /usr/bin/ | base64 | base64 -d
< /dev/stdin
; без файлаbase64
будет просто читать из стандартного ввода, который он наследует от своего родителя, который является/dev/stdin
.Ответ Sundeep работает,
base64
потому что эта утилита не поддерживает несколько строк. Более общее исправление для более общего случаяэто что-то вроде
источник