Не могу отправить необработанные данные в команду (bash) - PullRequest
0 голосов
/ 11 июля 2019

Я хочу сохранить файл .ogg внутри скрипта bash и воспроизвести его позже в скрипте. Я пробовал:

  • Архивирование .ogg в файл .7z (экономия некоторого пространства), кодирование архива .7z в base64, сохранение этого base64 в моем сценарии и декодирование -> разархивирование -> воспроизведение необработанного потока .ogg.

  • Кодирование .ogg в base64, сохранение этого base64 в моем скрипте и декодирование-> воспроизведение необработанного потока ogg.

  • Создание шестнадцатеричного дампа файла .ogg, сохранение этого гексагона в моем скрипте, использование sed для размещения \x перед каждыми двумя символами гексагона, использование printf для печати гексагона и <<< его в ogg123 (мой ogg player)

  • Архивирование .ogg в файл .7z (экономит место), создание шестнадцатеричного дампа файла .7z, сохранение этого гексагона в моем скрипте, используя sed для размещения \x перед каждыми двумя символами гекс, используя printf для печати гекса, перенаправьте вывод в 7za e -si и <<< в ogg123 (мой ogg player)

Ни одна из этих работ. Самый успешный подход, который у меня был:

ogg123 <<< cat sound.ogg

Однако я бы действительно предпочел, чтобы на диск не записывались никакие файлы (я хотел бы сохранить все это в моем сценарии) и, если возможно, не использовать переменную (и) для хранения каких-либо необработанных данных.

Другая проблема заключается в том, что ogg123 не поддерживает чтение из стандартного ввода, поэтому я не могу передать в него любые необработанные данные ogg.

Команды, которые я пробовал: (hex и base64, конечно, усекаются)

$ ogg123 <<< printf 'xae\x0f\x00\xad\x83' # .ogg data
/usr/local/bin/ogg123: Argument list too long

$ ogg123 <(printf 'xae\x0f\x00\xad\x83') # .ogg data
Error opening /dev/fd/63 using the oggvorbis module.  The file may be corrupted.

$ S=<<SOUND
dGhpcyBiYXNlNjQgd291bGQgYmUgdGhlIGJhc2U2NCBvZiBteSBvZ2cgZmlsZQ==
SOUND
$ ogg123 <(echo $S | openssl base64 -d)
Error opening /dev/fd/63 using the oggvorbis module.  The file may be corrupted.
$ ogg123 <<< echo $S | openssl base64 -d
5?w?k譸?

Я попробовал несколько других команд, однако я случайно вышел из терминала, и эти две были единственными командами, сохраненными в моей .bash_history. Но, поверьте мне, все, что я пытался, ни к чему не привело (я потратил 3,5 часа на это уже безуспешно).

Использование macOS High Sierra 10.13.6, выпуска bash 3.2.57 (1), ogg123 от vorbis-tools 1.4.0, 7za 16.02 (x64), openssl base64 (LibreSSL 2.2.7).

1 Ответ

0 голосов
/ 11 июля 2019

Не полное исправление, но я заставил его работать со следующим:

mplayer <(openssl base64 -d <<SND
dGhpcyBiYXNlNjQgd291bGQgYmUgdGhlIGJhc2U2NCBvZiBteSBvZ2cgZmlsZQ==
SND
)

Переходит к mplayer для чтения таких необработанных данных (также работало чтение из стандартного ввода!)

...