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

Попробуйте WinRAR. Это добилось цели для меня в Windows и также существует версия Linux.

2
26.12.2014, 00:16
2 ответа

Со следующим сценарием это работает (использование 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 (который является самим файлом сценария), и печатает 1 000 строк после той строки (достаточно для моего маленького аудио тестового файла). Вывод grep затем передается по каналу к mplayer который читает /dev/stdin (сокращение для /dev/stdin -).

Я создал этот файл путем конкатенации файла сценария 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 выбирает все строки из номера один до строки, где это находит, что слово выходит, и удаляет их. Остальное вставляется и передается по каналу к mplayer. Конечно, тот единственные работы, если выход слова происходит только однажды в сценарии перед двоичными данными.

0
27.01.2020, 23:02
  • 1
    Вероятно, будет лучше использовать sed 1,/^Ogg/d "$0" | mplayer - вместо этого. –  elias 07.02.2014, 18:24
  • 2
    @elias не, который не работает. Ogg часть звукового файла (первые три байта из него), и Ваша команда удаляет эту строку (насколько я понимаю это). Если я применяю Вашу команду к своему playme.sh файлу, вывод к маленькому, не играет. очень верный –  erik 07.02.2014, 18:42
  • 3
    , о, хорошо, затем возможно, с помощью другого разделителя и затем использования: sed 1,/^BEGIN_FILE/d "$0" | mplayer -. Я просто думал, что это могло быть более общее решение. =) –  elias 07.02.2014, 18:44
  • 4
    Да, хорошо. Это является более общим, чем необходимость настроить количество выходных строк в grep’s -A опция. Я изменю свой ответ. –  erik 07.02.2014, 18:46

Ваш сценарий должен содержать также связанные данные:

#!/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. Можно также скорректировать строки хвоста.

0
27.01.2020, 23:02
  • 1
    Имеет Ваша версия какие-либо преимущества перед моей версией? Мне не нравится он, потому что это длиннее. И я скорее считал данные непосредственно из файла вместо того, чтобы писать это во временный файл. Предположите, что медиа-файл составляет 10 ГБ в размере. Не хорошая идея поместить это во временный файл сначала. –  erik 07.02.2014, 19:06

Теги

Похожие вопросы