Intereting Posts
Висячие установки блокируют новые установки в WebOS Как расшифровать и скопировать домашнюю папку с ноутбука на внешний жесткий диск через live usb GUI? telnet для хоста / порта работает, пока на этом хосте не прослушивается сервис на этом порту Установите значение по умолчанию для данного пользователя (limits.conf) Не удается получить удаленный доступ к PostgreSQL Ошибка создания контейнера LUKS: нет устройства с контуром Bash: Групповые строки, содержащие одну и ту же подстроку Попытка настроить дополнительный виртуальный терминал на debian jessie boot Исправить яркость linux mint 17.2 Принудительное воспроизведение звука с высоким качеством Медленный показ и монтирование NFS на AIX Как остановить Gthumb от открытия, когда я подключу камеру? Команда тестирования в unix не выводит результат Сравнение двух строк в BASH с использованием awk Блокировка только определенной подстраницы веб-сайта

Как добавить аудиофайл в сценарий оболочки

Как добавить звуковой файл (OGG vorbis) в сценарий оболочки, создающий сценарий как можно меньше и в то же время способный выполнять его как можно больше систем? Я хочу, чтобы звуковой файл воспроизводился.

Я не хочу, чтобы это было uuencode d, потому что sharutils не установлены на многих системах. base64 хорош, но делает файл / скрипт больше, чего я не хочу.

Должен ли я использовать команду mplayer или play из пакета sox? Является ли это более распространенным явлением в системах Linux / BSD? Или в основном установлен другой медиа-плеер? Должен ли я преобразовать аудиофайл в другой формат / кодек (если это не делает файл намного больше), чтобы иметь более возможных игроков для воспроизведения файла или OGG vorbis – хороший выбор?

    С помощью следующего скрипта он работает (используя mplayer , который, вероятно, не присутствует во многих системах).

     #!/bin/sh grep -A 1000 --text -m 1 ^Ogg "$0" | mplayer - exit OggS^@^B^@^@^@^@^@^@^@^@^]f<8a>g^@^@^@^@lY߸^A^^^Avorbis^@^@^@^@^A"V^@^@^... 

    Последняя строка – это начало двоичного файла аудиофайла.

    Команда grep ищет первое вхождение Ogg в файле $0 (это сам файл сценария) и печатает 1000 строк после этой строки (этого достаточно для моего небольшого тестового тестового файла). Выход grep затем передается в mplayer который считывает /dev/stdin (сокращение для /dev/stdin is - ).

    Я создал этот файл, playmeBashScript.sh файл сценария playmeBashScript.sh с звуковым файлом sound.ogg :

     cat playmeBashScript.sh sound.ogg > playme.sh 

    Более общая и немного более короткая версия с sed вместо grep (благодаря Elias):

     #!/bin/sh sed 1,/^exit$/d "$0" | mplayer - exit OggS^@^B^@^@^@^@^@^@^@^@^]f<8a>g^@^@^@^@lY߸^A^^^Avorbis^@^@^@^@^A"V^@^@^... 

    В этом случае sed выбирает все строки от номера один до строки, где находит слово exit и удаляет их. Остальное вставляется и передается в mplayer . Конечно, это работает только в том случае, если выход слова происходит только один раз в скрипте перед двоичными данными.

    В вашем сценарии должны быть также объединенные данные:

     #!/bin/sh TMPFILE=$(mktemp) trap "rm ${TMPFILE}" 0 1 2 3 11 15 tail -n +7 $0 ${TMPFILE} exec mplayer ${TMPFILE} 

    Давайте назовем скрипт omniplay . Таким образом, вам нужно сгенерировать ваш ogg-файл, добавляемый к скрипту:

     cat file.ogg >> omniplay chmod +x omniplay ./omniplay 

    Это стандартный метод, используемый многими файлами install.sh. Посмотрите также на gzexe . Вы также можете отрегулировать хвостовые линии.