Необходимо попробовать что-то как:
flac -c -d -force-raw-format --endian=little --signed=unsigned input.flac | \
lame -r --little-endian --unsigned \
-s 44.1 [other encoding options here] - output.mp3
На flac
сторона:
-c
вывод средств к stdout-d
декодировать-force-raw-format --endian=little --signed=unsigned
вызовите СЫРЫЕ ДАННЫЕ, прямой порядок байтов, неподписанный выводНа lame
сторона:
-
читайте из stdin (это почти стандартно),-r
считайте СЫРЫЕ ДАННЫЕ pcm данные--little-endian --unsigned
соответствуйте что хромые выводы-s
частота: соответствуйте тому параметру тому, что содержит Ваш flac файл--bitwidth
если Ваш flac файл не является 16bits/sampleОтносительно порядка байтов и со знаком, не уверенный то, что "собственный" формат Вы имеете, (или как решить, что) - пробуют несколько комбинаций. Пока они соответствуют с обеих сторон канала, выбирание неправильного должно только стоить процессорного времени.
Казалось бы, что кун-фу полномочия на Вашем сервере является довольно интересной обрабатываемой деталью. Существует две вещи, которые можно попробовать, но поскольку мы можем только предположить, какой alice и боб могут и не могут сделать, YMMV.
Почему это должен быть скрипт, который запущен как alice? Поскольку это - некоторый автоматизированный доступ? Ну, если существует некоторый демон крона, у Вас может быть задание крона для боба, который регулярно выполняет некоторый сценарий удара. Если тот сценарий удара перезаписываем alice, Вы нашли себя методом для выполнения сценариев, как боб без потребности в su (делает)? вуду. Все же это действительно смягчает безопасность немного...
Другой подход, я никогда не пробовал, идет вроде фоновой оболочки с stdin и связанный с каналами. Должно быть возможно отправить sudo su - bob\n
к каналу stdin и это должно заставить фоновую оболочку выполнить ту команду. Каждая последующая команда, отправленная в фоновую оболочку, должна быть выполнена как боб. Грубый эскиз - это:
mkdir -p /tmp/backshell
mkfifo /tmp/backshell/stdin
mkfifo /tmp/backshell/stdout
mkfifo /tmp/backshell/stderr
bash -l >/tmp/backshell/stdout 2>/tmp/backshell/stderr </tmp/backshell/stdin &
cat /tmp/backshell/stdout &
cat /tmp/backshell/stderr >&2 &
echo "sudo su - bob" >> /tmp/backshell/stdin
echo "whoami" >> /tmp/backshell/stdin
Однако это имеет дефект что после первого echo
канал stdin закрывается и следовательно кожух соединителя также. Таким образом, необходимо или найти способ помешать каналу stdin закрываться, или Вы реализуете его с помощью чего-то немного более сложного. Я думаю Python как довольно хороший модуль для подоболочек и взаимодействующий с ними.
Необходимо смочь передать команды, которые будут выполнены к stdin sudo su - bob
команда (и следовательно к оболочке это создает):
sudo su - bob <<ENDCOMMANDS
echo "Running as:"
whoami
echo "done now...
ENDCOMMANDS
bob
. Снова, это значительно ослабляет безопасность. – tripleee 16.07.2013, 09:40