Как я могу запустить эту команду в сценарии оболочки - PullRequest
1 голос
/ 21 января 2011

Это мой сценарий оболочки, но он выдает ошибки:

#!/bin/sh

while getopts "i:o:" flag
do
   case $flag in
   i) file_input=$OPTARG
   ;;
   o) file_output=$OPTARG
   ;;
   esac
done

mplayer -nosound -benchmark -vo yuv4mpeg:file=>(x264 --demuxer y4m \
              --crf 20 --threads auto --output $file_output - ) $file_input

Сообщение об ошибке:

Не удается получить дескриптор памяти или файла для записи "> (x264 --demuxer y4m --crf 20 - threads auto - output video.264 -)"! FATAL: Невозможно инициализировать видеодрайвер.

Когда я запускаю этот cmd на putty:

mplayer -nosound -benchmark -vo yuv4mpeg:file=>(x264 --demuxer y4m \
              --crf 20 --threads auto --output video.264 - ) video.wmv

отлично работает ..

Что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 21 января 2011

Используемая вами команда использует сложный поток потока bash для того, чтобы подобрать синтаксис , то есть >(), чтобы достичь того, что вы хотите. Возможно, ваш /bin/sh (который вы вызываете в качестве оболочки для этого сценария в shebang) не совпадает с оболочкой, которую вы используете в интерактивном режиме (например, bash)?

1 голос
/ 21 января 2011

Оператор замещения процесса >(...) зависит от Bash.Он также недоступен, если Bash называется /bin/sh, потому что в этом случае Bash ограничивается более совместимым подмножеством своих возможностей.

Просто используйте #!/bin/bash вместо #!/bin/sh в началеваш сценарий.

0 голосов
/ 21 января 2011

Я предлагаю вам добавить ', чтобы защитить вас специальными символами:

mplayer -nosound -benchmark -vo 'yuv4mpeg:file=>(x264 --demuxer y4m --crf 20 --threads auto --output $file_output - )' $file_input
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...